2012-03-28 3 views
11

私は別のモデルインスタンスを設定したモデルインスタンスを持っています。つまり、model.set('rsvp', new App.Rsvp)です。私はconsole.logの属性を見ることができますが、 'undefined'を返すBackbone.js model.get()

ビューでそれらのリストを生成するためにコレクションを反復処理すると、model.rsvp.get('attending')を呼び出すときにundefinedが返されます。私はconsole.log(model.rsvp)を行う際

はまだ私が取得この:

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 

だから、オブジェクトとの問題はないように思われる、まだ未定義のリターンを得ます。

私のJavascriptスキルはまだかなり弱いと認めなければなりません。私はここで何が欠けていますか?

答えて

18

console.log(Object)あなたを欺くことができます。 console.logを呼び出した時点では、Objectの状態は表示されません。

このjsFiddleを確認し、コンソールを開きます。 console.logには、console.logコールの時点ではなく、スクリプトの最後にObjectの状態がどのように表示されているかがわかります。

より信頼性の高い情報を求めるには、console.logの方が簡単です。同等model['rsvp'] = foo;あるBackbone.js Empty Array Attribute

+0

あなたはそうです。 $ .when呼び出しのバグがありましたが、console.logが大丈夫だったので、問題の原因はわかりませんでした。それは明らかに大丈夫ではなかった。 ありがとう! – MysteriousFist

0

理論的には、動作するはずですが、属性をバイパスしてプロパティをモデルインスタンスに直接格納することは、おそらく良い考えではありません。ここにはjsfiddle that shows it works in conceptがあります。私の推測では、model.rsvpプロパティが消えるように、あなたのモデルインスタンスがコード内のfetchを介してソースデータから再作成されていると思います。それともmodelは、あなたが考えると同じインスタンスではありません。

+0

最初に.setを使用して同じ結果を試した場合にのみ、model.rsvpが定義されます。そして、 'console.log'は連続しています。だからインスタンスを表示し、属性を取得しようとすると未定義と表示されます。だから、私はその期間中にどのようにリセットされるのかは分かりません。 – MysteriousFist

0

model.rsvp = foo;(このコードビット#1を呼び出すことができます)されていません。

より詳細な情報については、これを読んで

(テストOSX以上のクロム、FirefoxとSafariの場合) model.set({'rsvp':foo});(コードビット#2)と同じです。別のモデルインスタンスfoo(またはその他のオブジェクトまたは値)をモデルインスタンスmodelに貼り付ける場合は、コードビット#1または同等のコードを使用します。最終的に永続的に格納される可能性のあるモデルインスタンスに属性値のペアを追加する場合は、コード#2を使用します。同様に、model.rsvp = foo;またはmodel['rsvp'] = foo;

関連する問題