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

Baz*_*zZy 23 render backbone.js

我有模特邮政和收集帖子.并想用所有帖子的列表制作表格<select id="multi" multiple="multiple">.所以我必须在我的#multi中使用这个模板进行PostView渲染:

<option value=""><%= title %></option>
Run Code Online (Sandbox Code Playgroud)

但最后我把它包裹着div.有没有包装这个模板的解决方案<div>

kre*_*eek 33

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

var PostView = Backbone.View.extend({
  tagName: 'option'
});
Run Code Online (Sandbox Code Playgroud)

UPDATE

从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);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 甚至`this.el.value ='something'`将jQuery留给需要的地方:) (4认同)
  • 有没有办法在Marionette中轻松应用? (2认同)

Der*_*ley 18

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

  1. this.el完全替换
  2. 呼吁delegateEvents新的el
render: function(){
  var html = "some foo";
  this.el = html;
  this.delegateEvents(this.events);
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在最新版本的BB中有一个函数 - [view.setElement(html)](http://documentcloud.github.com/backbone/#View-setElement) (8认同)