我有一個樹的類別,我想做Backbone.js使用而不是使用jQuery或在服務器端進行渲染。我有描述爲模板以下突破:如何在Backbone.js中呈現嵌套視圖?
<li>
<select class="categories">
<option value="">Select</option>
</select>
<input class="edit" type="button" value="Edit">
<input class="add" type="button" value="Add">
</li>
我分別呈現爲內視圖標籤select
。當我改變選擇時,我需要從服務器獲取嵌套類別,並使用上面包裝在標籤ul
中的模板將它們附加到標籤li
。在外觀上,我創建了內部視圖,並在編輯和添加時單擊監聽事件。當嵌套層次超過一層時,我遇到了最後一個事件的麻煩,因爲它們是嵌套層次的等同時間。我究竟做錯了什麼?
下面的代碼片段展示了我如何與外部和內部意見的工作:
var CategoriesInnerView = Backbone.View.extend({
tagName: 'select',
initialize: function(){
_.bindAll(this,'addOne','addAll');
this.collection.bind('reset',this.addAll);
},
addOne: function(category){
this.$el.append(new CategoryView({model:category}).render().el);
},
addAll: function(){
this.collection.each(this.addOne);
},
events: {
'change':'changeSelected'
},
changeSelected:function(){
var children = new Categories();
children.url = 'categories/' + this.$el.val();
var childrenView = new CategoriesOuterView({collection:children});
this.$el.parent().find('ul').remove();
this.$el.parent().append(childrenView.render().el);
children.fetch();
}
});
var CategoriesOuterView = Backbone.View.extend({
tagName: 'ul',
template: _.template($('#categories-template').html()),
initialize:function(){
this.inner = new CategoriesInnerView({collection:this.collection});
},
render: function(){
this.$el.html(this.template);
this.inner.setElement(this.$('select')).render();
return this;
},
events: {
'click .edit':'edit',
'click .add': 'add'
},
edit: function(){
this.renderForm(this.collection.get(this.inner.$el.val()));
},
add: function(){
this.renderForm(new Category());
},
renderForm:function(category){
// some code to render the form
}
});
「的Backbone.js的,而不是使用jQuery 「,Backbone沒有任何內置的渲染功能。 – Prinzhorn
是的,我知道。我錯了。 –