渲染jQuery對象我是相當新的Backbone.js的發展,同時爲了顯示一個子視圖卻碰上了一個有點路障。通過骨幹查看
目前,我採取了多種觀點來呈現的自定義下拉按鈕,以及其他元素。我已經採取了基於DocumentCloud's code
這種方法這是我到目前爲止有:
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
命中時,items變量不能填充,因爲我傳遞了一個jQuery對象而不是一個字符串,然而無論何時我使用items: this.itemsContainer.html()
,只需粘貼由引號括起來的html。 ..我可以簡單地更換引號,但只是感覺就像一個黑客給我。
任何幫助將不勝感激。謝謝!
哇,感謝偉大的答案!非常豐富和有益的。 我編輯了Github鏈接,以正確反映我正在工作的來源。我認爲,因爲這是[jashkanes](https://twitter.com/#!/jashkenas)的工作原理,那麼使用'constructor'將會很好。再次感謝詳細的回覆,隊友。 –
@Jaysche:我沒有在那裏使用'constructor',也許它只是早於Backbone中initialize'的舊代碼。使用'$(this.el)'而不是'this。$ el'確實表明它有點老,並且可能沒有爲更新的Backbones進行更新。 –
我想這是有道理的。我正在讀一些有關DocumentCloud的文章,顯然Backbone是通過從項目中提取的部分代碼創建的,所以這很可能是這裏發生的。再次感謝! –