【问题标题】:How should a Backbone model or collection handle views?Backbone 模型或集合应该如何处理视图?
【发布时间】:2011-12-29 21:27:27
【问题描述】:

我有一组模型,每个模型都附加一个视图。该系列还具有全球视野。由模型视图负责删除相应的模型是最好的,还是集合(或集合视图)应该这样做?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    集合具有.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'}
    ]);
    

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

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

    【讨论】:

    • 所以更进一步,单击删除按钮,您可以引发一个删除事件,由集合拾取,集合删除给定模型(在本例中为船),这会触发删除事件,视图可以监听它,并取消绑定它的事件并从 dom 中删除视图。我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多