1

私はモデルとコレクションを持っています

Model1 = Backbone.Model.extend();
Model2 = Backbone.Model.extend({
    defaults: {
        code:'',
        m1_id: ?????, // this part should get the Model1 "id" attribute
        id: ''        //                 e.g. the value of m1.get('id');
     }
});

C = Backbone.Collection.extend({ 
    model: Model2
});

それぞれのインスタンスを作成します

var m1 = new Model1();
var m2 = new Model2();
var c = new C();

値を設定します

m1.set({'code':'0001', 'type': 'O', id: 1});

c.add({'code':'sample1', 'id':1});  // note: i did not set the m1_id
c.add({'code':'sample2', 'id':2});

ただし、コレクション内のモデルは Model1 id 属性を取得します。

コレクションにはこれが必要です

c.at(0).toJSON();
-> {'code':'sample1', 'm1_id': 1, id: 1}  // note: the "m1_id" value is 
c.at(1).toJSON();                         //       from Model1 "id" attribute 
-> {'code':'sample2', 'm1_id': 1, id: 2}

Model1 属性からコレクション内の Model2 属性を自動的に設定する方法..ありがとう!

4

2 に答える 2

3

まず、コードに問題があります。

モデルとコレクションをインスタンス化するには、var m1、m2、および c をキーワード new で呼び出す必要があります。

例えばvar m1 = new Model1()

コレクションに追加するコード (c.add) にも右中括弧がありません

c.add({'code':'sample1'); // should be c.add({code:"sample1"});

あなたのコードと質問は私には完全に明確ではありませんが、おそらく同じ ID でモデルをコレクションに追加しようとしているのではないかと思います。バックボーンのドキュメントに従って、同じ ID の複数のモデルがコレクションに追加されることはありません。

同じモデル (同じ id を持つモデル) をコレクションに複数回追加しても、ノーオペレーションであることに注意してください。

別のモデルからIDを渡す必要がある場合は、コレクションに渡す際に「parent_id」があるなど、別の属性を設定する必要があります。

例えば var temp_id = m1.get('id'); c.add({code:"sample3", id:temp_id});

于 2013-07-17T04:57:25.930 に答える