【发布时间】:2011-12-29 21:27:27
【问题描述】:
我有一组模型,每个模型都附加一个视图。该系列还具有全球视野。由模型视图负责删除相应的模型是最好的,还是集合(或集合视图)应该这样做?
【问题讨论】:
标签: backbone.js
我有一组模型,每个模型都附加一个视图。该系列还具有全球视野。由模型视图负责删除相应的模型是最好的,还是集合(或集合视图)应该这样做?
【问题讨论】:
标签: backbone.js
集合具有.add 和.remove 方法,当您使用其中一个方法时,它们会在集合上触发add 或remove 事件。这就是您可以完全不使用视图进行绑定的方式。
var ships = new Backbone.Collection();
ships.bind('add', function(ship) {
alert('Ahoy ' + ship.get('name') + '!');
});
ships.add([
{name: 'Flying Dutchman'},
{name: 'Black Pearl'}
]);
因此,将集合附加到构造函数内部的视图。这只是通过this.collection 使集合可用
var ShipView = Backbone.View.extend({
collection: ships
});
这是您可以使用视图进行绑定的方式。
// Create collection instance.
var ships = new Backbone.Collection();
// Create view class.
var ShipView = Backbone.View.extend({
collection: ships,
initialize: function() {
// This is binding add, to the view function.
this.collection.bind('add', this.add);
},
add: function(ship) {
alert('Added ' + ship.get('name') + '!');
}
/*Optional for DOM.
events: {
'click .addMyShip': 'addShip'
},
addShip: function(eventObject) {
this.collection.add([models]);
}*/
});
// Create view instance.
var shipView = new ShipView();
// Add two ships.
ships.add([
{name: 'Flying Dutchman'},
{name: 'Black Pearl'}
]);
当视图初始化时,它将集合的添加事件绑定到运行this.add,这是视图的一个函数。或者,您可以使用 delegateEvents API 来处理映射 DOM 元素 event selector 到 function 在视图中运行函数。该函数可以调用this.collection.add,其中会产生多米诺骨牌效应。
视图与集合或模型交互的方式是通过绑定到事件,您可以定义这些事件并在视图内处理它们。有几个特殊选项,如果通过,视图将可用:model, collection, el, id, className, and tagName.
【讨论】: