新的Backbone.Model()与Backbone.Model.extend()
我是JS和Backbone的新手
这两者有什么区别?
TestModel = new Backbone.Model({ title: "test title" }) TestModel = Backbone.Model.extend({ title: "test title" })
有一个基本的差别,简而言之,可以说是“房子和房子本身的差别”。
对于专家程序员,我只想说“新的Backbone.Model”返回一个对象实例,但“Backbone.Model.extend”返回一个构造函数
第一:一个新的对象 (即房子)
var TestModel = new Backbone.Model({ title: "test title" });
你创build一个新的对象,其结构(方法和variables)已被定义在别的地方。 对象可以被认为是一种语言的“所有非本地项目”,其中“本地项目”是指整数,字符等基本types。
在大括号{}中,您传递了一些variables或方法的值。 正如托马斯·努尔凯维奇(Tomasz Nurkiewicz)先前解释的那样,这被称为构造函数,因为它允许你“构造”一个新模型在别处被描述过的对象。
给你一个已知的例子:你写
var myArray = new Array();
这意味着你正在创build一个新的数组,这是一个在其他地方定义的非本地对象。 你也可以写:
var myArray = new Array([1,2,3,4,5]);
它用给定的数字填充数组。
第二:修改现有对象的定义 (即房子的项目)
同
var TestModel = Backbone.Model.extend({ title: "test title" })
你对虚拟机说一些非常简单的东西:“你给我默认的对象是非常好的,但是我想实现更多的function/属性”。 因此,使用“扩展”子句,您可以修改对象的定义,添加或覆盖现有的方法/属性。
例子: backbone.js中的一个很好的例子是集合的比较函数给出的。 当扩展定义它的对象时,“它将被用来维护按照sorting顺序的集合”。
例:
myCollection = Backbone.Collection.extend({ comparator:function(){ return item.get('name'); } });
一般来说
当“骨干”(使用backbone.js框架进行开发)时,你需要做的是用给定的对象(例如一个视图)来扩展:
window.ButtonView = Backbone.View.extend({ btnText:'nothingByDefault', myNewMethod:function(){ //do whatever you want, maybe do something triggered by an event, for instance } });
然后在代码的其他地方使用它,一次你想要处理的每个button,包括大括号中的所有值你想给对象
[...] var submitBtn = new ButtonView({btnText:"SubmitMe!"}), var cancelBtn = new ButtonView({btnText:"Erase All!"});
….希望这可以帮助…
在第二种情况下, TestModel
是一个构造函数,您可以稍后多次使用它来创build模型的实例:
var model = new TestModel();
然而,通过title
extend
有不同的含义。 你应该可以使用:
var TestModel = Backbone.Model.extend({defaults: { title: "test title" }});
或者在创build对象时传递模型属性:
var model = new TestModel({ title: "test title" });
另一方面,在第一种情况下, TestModel
已经是模型的一个实例(因此它应该命名为testModel
以遵循JavaScript命名约定):
var testModel = new Backbone.Model({ title: "test title" })