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)
Der*_*ley 18
如果您不希望视图包装HTML,则必须执行以下操作:
this.el完全替换delegateEvents新的elrender: 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>您想要的标签,仅此而已.