Backbone模型或集合应如何处理视图?

时间:2011-12-29 21:27:27

标签: backbone.js

我有一组模型,每个模型都附有一个视图。该集合还具有全局视图。模型视图最好是删除相应的模型,还是集合(或集合视图)应该这样做?

1 个答案:

答案 0 :(得分:3)

收藏集使用.add.remove方法,当您使用其中一个时,它们会在集合上触发addremove事件。这就是你可以在不使用视图的情况下进行绑定的方法。

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'}
]);

当视图初始化时,它会将集合的add事件绑定到运行this.add,这是视图的一个功能。 (可选)您可以使用delegateEvents API来处理在视图中运行该函数的DOM元素event selectorfunction的映射。该函数可以调用this.collection.add,其中会产生多米诺骨牌效应。

视图与集合或模型交互的方式是通过绑定到事件,您可以定义这些事件并在视图中处理它们。有几个特殊选项,如果通过,将可用于视图:model, collection, el, id, className, and tagName.