我对 Backbone.js 开发相当陌生,在尝试渲染子视图时遇到了一些障碍。
目前,我有几个视图来呈现自定义下拉按钮以及其他元素。我已经根据DocumentCloud 的代码采用了这种方法
这是我到目前为止所拥有的:
app.ui.SelectMenu = Backbone.View.extend({
className: 'btn-group group-item',
options: {
id: null,
standalone: false
},
events: {
"click .dropdown-menu a": "setLabel"
},
constructor: function (options) {
Backbone.View.call(this, options);
this.items = [];
this.content = JST['common-select_button'];
this.itemsContainer = $('.dropdown-menu', $(this.content.render()));
// Add any items that we may have added to the object params
if (options.items) {
this.addItems(options.items);
}
},
render: function () {
this.$el.html(this.content.render({
label: this.options.label,
items: this.itemsContainer
}));
this._label = this.$('.menu-label');
return this;
},
setLabel: function (label) {
$(this._label).text(label || this.options.label);
},
addItems: function (items) {
this.items = this.items.concat(items);
var elements = _(items).map(_.bind(function (item) {
var attrs = item.attrs || {};
_.extend(attrs, { 'class': 'menu_item' + (attrs['class'] || '') });
var el = this.make('li', attrs, item.title);
return el;
}, this));
$(this.itemsContainer).append(elements);
}
});
到目前为止,我已经成功地呈现了我的按钮以及相应的标签,但是.dropdown-menu
在调用该addItems
函数时我似乎无法填充。
我假设当render
命中时,由于我传递的是 jQuery 对象而不是字符串,因此无法填充 items 变量,但是每当我使用时items: this.itemsContainer.html()
,它只是粘贴用引号括起来的 html ......我可以简单地替换报价,但这对我来说就像是一种黑客行为。
任何帮助将非常感激。谢谢!