上面代码通过Backbone.View的extend方法,定义了一个视图类AppView。该类内部有一个render方法,用于将视图放置在网页上。 使用的时候,需要先新建视图类的实例,然后通过实例,调用render方法,从而让视图在网页上显示。 复制代码 代码如下: var appView = new AppView(); appView.render();
上面代码新建视图类AppView的实例appView,然后调用appView.render,网页上就会显示指定的内容。 新建视图实例时,通常需要指定Model。 复制代码 代码如下: var document = new Document({ model: doc });
initialize方法 视图还可以定义initialize方法,生成实例的时候,会自动调用该方法对实例初始化。 复制代码 代码如下: var AppView = Backbone.View.extend({ initialize: function(){ this.render(); }, render: function(){ $("main").append("<h1>一级标题</h1>"); } }); var appView = new AppView();
Model代表单个的对象实体。 复制代码 代码如下: var User = Backbone.Model.extend({ defaults: { name: "", email: "" } }); var user = new User();
上面代码使用extend方法,生成了一个User类,它代表model的模板。然后,使用new命令,生成一个Model的实例。defaults属性用来设置默认属性,上面代码表示user对象默认有name和email两个属性,它们的值都等于空字符串。 生成实例时,可以提供各个属性的具体值。 复制代码 代码如下: var user = new User ({ id: 1, name: "name", email: "name@email.com" });
上面代码在生成实例时,提供了各个属性的具体值。 idAttribute属性 Model实例必须有一个属性,作为区分其他实例的主键。这个属性的名称,由idAttribute属性设定,一般是设为id。 复制代码 代码如下: var Music = Backbone.Model.extend({ idAttribute: "id" });
get方法 get方法用于返回Model实例的某个属性的值。 复制代码 代码如下: var user = new User({ name: "name", age: 24}); var age = user.get("age"); // 24 var name = user.get("name"); // "name"
set方法 set方法用于设置Model实例的某个属性的值。 复制代码 代码如下: var User = Backbone.Model.extend({ buy: function(newCarsName){ this.set({car: newCarsName }); } }); var user = new User({name: "BMW",model:"i8",type:"car"}); user.buy("Porsche"); var car = user.get("car"); // ‘Porsche"
on方法 on方法用于监听对象的变化。 复制代码 代码如下: var user = new User({name: "BMW",model:"i8"}); user.on("change:name", function(model){ var name = model.get("name"); // "Porsche" console.log("Changed my car"s name to " + name); }); user.set({name: "Porsche"}); // Changed my car"s name to Porsche
上面代码中的on方法用于监听事件,“change:name”表示name属性发生变化。 urlroot属性 该属性用于指定服务器端对model进行操作的路径。 复制代码 代码如下: var User = Backbone.Model.extend({ urlRoot: "/user" });
上面代码指定,服务器对应该Model的路径为/user。 fetch事件 fetch事件用于从服务器取出Model。 复制代码 代码如下: var user = new User ({id: 1}); user.fetch({ success: function (user){ console.log(user.toJSON()); } }) 上面代码中,user实例含有id属性(值为1),fetch方法使用HTTP动词GET,向网址“/user/1”发出请求,从服务器取出该实例。 save方法 save方法用于通知服务器新建或更新Model。 如果一个Model实例不含有id属性,则save方法将使用POST方法新建该实例。 复制代码 代码如下: var User = Backbone.Model.extend({ urlRoot: "/user" }); var user = new User (); var userDetails = { name: "name", email: "name@email.com" }; user.save(userDetails, { success: function (user) { console.log(user.toJSON()); } })
上面代码先在类中指定Model对应的网址是/user,然后新建一个实例,最后调用save方法。它有两个参数,第一个是实例对象的具体属性,第二个参数是一个回调函数对象,设定success事件(保存成功)的回调函数。具体来说,save方法会向/user发出一个POST请求,并将{name: ‘name", email: ‘name@email.com"}作为数据提供。 如果一个Model实例含有id属性,则save方法将使用PUT方法更新该实例。 复制代码 代码如下: var user = new User ({ id: 1, name: "张三", email: "name@email.com" }); user.save({name: "李四"}, { success: function (model) { console.log(user.toJSON()); } }); 上面代码中,对象实例含有id属性(值为1),save将使用PUT方法向网址“/user/1”发出请求,从而更新该实例。 destroy方法 destroy方法用于在服务器上删除该实例。 复制代码 代码如下: var user = new User ({ id: 1, name: "name", email: "name@email.com" }); user.destroy({ success: function () { console.log("Destroyed"); } });
上面代码的destroy方法,将使用HTTP动词DELETE,向网址“/user/1”发出请求,删除对应的Model实例。 Backbone.Collection Collection是同一类Model的集合,比如Model是动物,Collection就是动物园;Model是单个的人,Collection就是一家公司。 复制代码 代码如下: var Song = Backbone.Model.extend({}); var Album = Backbone.Collection.extend({ model: Song });
上面代码中,Song是Model,Album是Collection,而且Album有一个model属性等于Song,因此表明Album是Song的集合。 add方法,remove方法 Model的实例可以直接放入Collection的实例,也可以用add方法添加。 复制代码 代码如下: var song1 = new Song({ id: 1 ,name: "歌名1", artist: "张三" }); var song2 = new Music ({id: 2,name: "歌名2", artist: "李四" }); var myAlbum = new Album([song1, song2]); var song3 = new Music({ id: 3, name: "歌名3",artist:"赵五" }); myAlbum.add(song3);