1

モデルにIDを次のように設定します。

var globalCounter = 0;
var MyModel = Backbone.Model.extend({
    initialize: function () {
        this.set('id', globalCounter);
        globalCounter += 1;
    }
});

次に、のインスタンスの束をMyModelコレクションに追加します。

var i, model;
MyCollection = Backbone.Collection.extend({});
myCollection = new MyCollection();

for(i = 0; i < 3; i += 1) {
    model = new MyModel();
    myCollection.add(model);
}

問題は、IDが渡されていないように見えることです。

console.log(myCollection.pluck('id')); // gives [undefined, undefined, undefined]

コレクションに追加したモデルのIDが消えるのはなぜですか?

4

1 に答える 1

0

myModelを定義する場所でglobalCounterを定義しますが、おそらくMyModelのインスタンスを作成する場所globalCounterはスクリプトのスコープ内にありません。

これは、フロントエンドに実装された「自動インクリメント」のようなものです。スコープの問題を防ぐために、私が書いたようにこれを行うことができます(自動インクリメントキーは、ある種の静的変数のように「モデル定義」の一部になります)。

var MyModel = Backbone.Model.extend({
    globalCounter : 0,
    initialize: function () {
        this.set('id', MyModel.prototype.globalCounter++);
    }
});
于 2012-09-26T14:56:53.177 に答える