私は 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: this.itemsContainer.html()
、引用符で囲まれたhtmlを貼り付けるだけです...単純に置き換えることができます引用ですが、それは私にとってハックのように感じます.
どんな助けでも大歓迎です。ありがとう!