2012-03-28 9 views
11

nitelikleri görebilirsiniz rağmen 'tanımsız'.backbone.js model.get() dönen ben, yani <code>model.set('rsvp', new App.Rsvp)</code> başka modeli örneği ayarlanmış bir modeli örneği var console.log

Görünümde bunların listesini oluşturmak için koleksiyonun üzerinde yinelendiğimde, model.rsvp.get('attending') numaralı telefonu arayarak undefined alırım. Bir console.log(model.rsvp) yaptığınızda

Yine de olsun bu:

Rsvp 
_changing: false 
_escapedAttributes: Object 
_moreChanges: false 
_previousAttributes: Object 
_setting: false 
attributes: Object 
    attending: true 
    created_at: "2012-03-28T09:42:22-05:00" 
    event_id: 20 
    id: 12 
    updated_at: "2012-03-28T09:42:22-05:00" 
    user_id: 3 
__proto__: Object 
cid: "c53" 
id: 12 
__proto__: Rsvp 

Yani nesne ile hiçbir sorun olduğunu görünür, henüz tanımlanmamış döner olsun.

Javascript becerilerimin hala oldukça zayıf olduğunu itiraf etmeliyim. Burada neyi özlüyorum?

cevap

18

console.log(Object) size dolandırıcı olabilir. console.log numaralı telefonu arayarak size Object durumunu göstermez.

onay bu jsFiddle ve konsolunu açın. console.log'un, console.log çağrısı sırasında, komut dosyasının sonunda Object durumunu nasıl gösterdiğini görürsünüz. daha basit değerlerle daha güvenilir bilgi çağrısı console.log için

. eşdeğer model['rsvp'] = foo; olduğunu Backbone.js Empty Array Attribute

+0

Haklısınız. Call.when bir çağrı ile bir hata vardı, ama konsol.log iyi görünüyordu çünkü sorunun kaynağı olduğunu bilmiyordum. Görünüşe göre tamam değildi. Teşekkürler! – MysteriousFist

0
çalışması gerektiğini ne yaptığını Teoride

ama modeli örneklerinde doğrudan özelliklerini ve mağaza özellikleri atlamasına muhtemelen iyi bir fikir değil. İşte bir jsfiddle that shows it works in concept. Tahminimce, model örneğiniz kodunuzda fetch aracılığıyla kaynak verisinden yeniden yaratılıyor, böylece model.rsvp özelliği kayboluyor. Bu veya model, olduğunu düşündüğünüz örnek değil.

+0

'u kullanırsanız, yalnızca model.rsvp tanımlanmış olacaksınız. İlk olarak aynı sonucu kullanarak .set kullanmayı denedim. Ve 'console.log' geri döndü. Yani örneği gösterir ve özniteliği almaya çalıştığımda tanımsız gösterir. Bu yüzden o dönemde nasıl sıfırlanacağını göremiyorum. – MysteriousFist

0

model.rsvp = foo; (bu kod bit 1. arama sağlar) değildir:

daha detaylı bilgi için bu oku

(test OSX üzerinde Chrome, Firefox ve Safari ise) model.set({'rsvp':foo}); ile aynıdır (kod biti # 2). Başka bir model örneğini foo (veya başka bir nesne veya değer) model örneğine model üzerine yapıştırmak isterseniz, kod bitini # 1 veya eşdeğerini kullanın. Sonunda bir yerde kalıcı olarak saklanabilecek bir model örneğine bir özellik değeri çifti eklemek isterseniz, kod bitini # 2 kullanın. Benzer şekilde, model.rsvp = foo; veya model['rsvp'] = foo;