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。”

所以我创建了两个对象,

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

现在属性 autor、allowedToEdit 坐标等,不是 n1 和 n2 的实例属性。它们是在proto链接下创建的。如何在backbone.js 中创建实例属性

此外,如果我尝试在对象中修改 javascript 中的继承属性,则继承的属性不会更改。而是在对象实例属性中创建具有相同名称的新属性。我如何做到这一点?提前致谢...

4

2 回答 2

4

我相信您对 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");

换句话说,Backbone 模型上的数据属性是动态的。您无需在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

您想使用 defaults 属性,这是您所期望的行为:

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 回答