1

私はBackboneとJSを初めて使用するので、間違っている場合は修正してください...

backbone.jsサイトの例を使用して、

var Note = Backbone.Model.extend({
    initialize: function() { ... },
    author: function() { ... },
    coordinates: function() { ... },
    allowedToEdit: function(account) {
        return true;
    } 
});

Backbone.jsによると、

「独自のModelクラスを作成するには、Backbone.Modelを拡張し、インスタンスプロパティと、コンストラクター関数に直接アタッチするオプションのclassPropertiesを提供します。」

だから私は2つのオブジェクトを作成します

var n1 = new Note;
var n2 = new Note;

現在、プロパティautor、allowedToEdit座標などは、n1およびn2のインスタンスプロパティではありません。それらはプロトリンクの下に作成されます。backbone.jsでインスタンスプロパティを作成するにはどうすればよいですか

また、オブジェクトのjavascriptで継承されたプロパティを変更しようとしても、継承されたプロパティは変更されません。代わりに、同じ名前の新しいプロパティがオブジェクトインスタンスのプロパティに作成されます。どうすればこれを達成できますか?前もって感謝します...

4

2 に答える 2

4

私はあなたがextendが何をするかについて少し混乱していると思います。Extendは継承に似ています。この方法でを拡張すると、これらのメンバー関数を持つModelと呼ばれる派生「クラス」が作成されます。Note

しかし、それはあなたが望むものではないと思います。これらのDATAプロパティを持つモデルが必要です。インスタンスへのデータの追加は簡単です。

var Note = Backbone.Model.extend({});
var n1 = new Note({
    author: "Gautham",
    coordinates: {x: 200, y: 100},
    allowedToEdit: true
});

var author = n1.get("author");

つまり、バックボーンモデルのデータプロパティは動的です。Note派生でそれらを宣言する必要はありません。

ただし、Note派生にこのように見えるプロパティを持たせたい場合は、get関数にプロキシするようにいつでもそれらを定義できます。

var Note = Backbone.Model.extend({
    author: function() { return this.get('author'); },
    coordinates: function() { return this.get('coordinates'); }
    allowedToEdit: function() { return this.get('allowedToEdit'); }
});
var n1 = new Note({...});
var author = n1.author();
于 2012-07-27T10:09:04.697 に答える
0

デフォルト属性を使用したかったのですが、これは期待している動作です。

var Note = Backbone.Model.extend({
  defaults:function(){
    return {
      author : 'Default author',
      coordinates : [0,0],
    };
  }
});

var note1 = new Note;
var note2 = new Note;
var note3 = new Note({author: 'Daniel!', coordinates:[9,9]});

console.log( note1.toJSON() );
console.log( note2.toJSON() );
console.log( note3.toJSON() );
于 2012-07-27T13:31:50.577 に答える