我刚刚开始研究 Backbone-relational,我正面临“HasMany”案例的问题。
首先是模型:
var Word = Backbone.RelationalModel.extend({
urlRoot: '/test/api/word',
idAttribute: '_id'
});
var List = Backbone.RelationalModel.extend({
urlRoot: '/test/api/list',
idAttribute: '_id',
relations: [{
type: Backbone.HasMany,
key: 'words',
relatedModel: 'Word',
reverseRelation: {
key: 'list',
includeInJSON: '_id'
}
}]
});
“列表”模型的视图,其中“单词”应该呈现如下:
var ListWordsView = Backbone.View.extend({
tagName: 'div',
initialize: function(){
_.bindAll(this,'render', 'renderWords');
//alert("its clicked!," + this.model.get('desc'));
this.model.bind('change',this.render);
this.model.bind('reset',this.render);
this.model.bind('add:words',this.renderWords);
},
renderWords: function(word){
alert("hello it's there!" + word.get("word_name"));
var wordView = WordView({ model: word });
this.$("#words_list").append(wordView.render());
},
render: function(){
try{
$("#list_box.title_name").html(this.model.get('list_name'));
this.model.toJSON();
//this.model.get('words').each(renderWords);
//this.setContent();
alert(JSON.stringify(this.model));
}
catch(e){
alert("error! : " + e.message);
}
}
});
所以问题出在调用这个 ListWordsView 时(在 List 的 fetch() 完成之后),“add:words”没有被触发,因此没有显示单词。
尝试了几种方法,但没有奏效。我渲染列表本身或其他东西的方式有什么问题吗?