6

モデルにIDを設定するために次のことを試しました:

var globalCounter = 1;

var Model = Backbone.Model.extend({
    initialize: function () {
        this.id = globalCounter;
        globalCounter += 1;
    }
});

myModel = new Model();
console.log(myMode.get('id')); // prints undefined

モデルに ID を設定するにはどうすればよいですか?

4

2 に答える 2

10

set()代わりに関数を使用する必要があります( http://jsbin.com/agosub/1/);

var globalCounter = 1;

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

myModel = new Model();
console.log(myModel.get('id')); // prints 1
于 2012-09-24T22:26:31.537 に答える
7

使用する必要があります:

this.set('id', globalCounter);

それ以外のthis.id = globalCounter;

Model オブジェクトに id 値を追加していますが、それをModel.attributesオブジェクトに追加したいと考えています。そして、Model.set() メソッドを実行していること。

model.set("key", value)値を入れますmodel.attributes.key;

model.get("key")内部の値を返しますmodel.attributes.key

これは Backbone の初心者にとっては少し奇妙ですが、重要な (そして簡単な) ポイントです。model.set(...)を使用すると、簡単にキャッチしてビューを更新できる変更イベントが発生するように設計されています。

バックボーンと ES6 の更新:

Backbone 属性オブジェクトは、ES6 の getter および setter によって古くなっています。これらの関数は、標準アクセスを上書きできます。

警告: これは ES6 でいつか使用される可能性のある疑似コードです!

class MyModel extends Backbone.Model{

    get id(){ return this.attributes.id; }
    set id(id){ this.attributes.id = id; }

}

これにより、次のように書くことができます:

let myModel = new Model();
myModel.id = 13; // will use myModel.id(13)
console.log (myModel.id); // will show myModel.id()

今日の時点では、これは Backbone 2 の夢にすぎません。

于 2012-09-24T22:52:13.837 に答える