Backbone.js在渲染中关闭div的换行

时间:2011-10-25 18:45:34

标签: backbone.js render

我有模特帖子和收藏帖子。并希望在<select id="multi" multiple="multiple">中创建包含所有帖子列表的表单。所以我必须在我的#multi中使用这个模板进行PostView渲染:

<option value=""><%= title %></option>

但最后我用div包裹它。有没有使用<div>包装此模板的解决方案?

3 个答案:

答案 0 :(得分:33)

如果没有为视图定义el(或tagName)(在类中或在实例化期间),视图将被放置在div标记内。 http://documentcloud.github.com/backbone/#View-el

var PostView = Backbone.View.extend({
  tagName: 'option'
});

<强>更新

从v0.9.0开始,Backbone有view.setElement(element)来完成这项工作。

var PostView = Backbone.View.extend({
    initialize: function() {
        var template = _.template('<option value=""><%= title %></option>');
        var html = template({title: 'post'});
        this.setElement(html);
    }
});

答案 1 :(得分:18)

如果您不希望视图包装HTML,则必须执行以下操作:

  1. 完全替换this.el
  2. 在新delegateEvents
  3. 上致电el
    render: function(){
      var html = "some foo";
      this.el = html;
      this.delegateEvents(this.events);
    }
    

    由于Backbone会生成div或其他标记(基于您对视图的tagName设置),因此您必须完全替换它。这很容易做到。但是,当你这样做时,你会丢失你声明的事件,因为Backbone使用引擎盖下的jQuery delegate来连接它们。要重新启用声明的事件,请调用delegateEvents并传入事件声明。

    结果是您的view.el将成为您想要的<option>标记,仅此而已。

答案 2 :(得分:4)

在0.9.0版本中,Backbone引入了view.setElement(element)来处理此操作。