我正在使用rails api开发一个backbone.js应用程序,它提供了如下所示的json:
{
"name": "dan brown",
"genre": "fiction",
"books": [{
"title": "Da vinci Code",
"price": "50"
},
{
"title": "Some other name",
"price": "45"
}],
"name": "Author1",
"genre": "comedy",
"books": [{
"title": "asdfasdfdsf",
"price": "50"
},
{
"title": "asdfdsf name",
"price": "45"
}]
}
Todo: 1.显示页面左侧的作者列表。 2.当用户点击作者时,应显示相应的书籍,并带有add_to_cart的链接 3.最后,当用户点击该书时,它应显示有关该书的更多详细信息
进度: 1.我可以使用backbone.js获取作者列表并显示在左侧(authors.fetch()) 2.当用户点击时,我能够显示该特定作者的书籍。
问题:现在当用户第一次点击AUTHOR1时,在点击其他作者后,它会显示该作者的书籍但,如果用户再次点击同一个Author1没有显示任何书籍。似乎用户Backbone作者模型在点击一次后失去了点击事件....我希望点击事件能够坚持作者......
怎么做?
在哪里做?
非常感谢任何帮助和建议
在AuthorView
中events: {
"click .author": "select"
},
select: function() {
this.collection.trigger('select', this.model);
//console.log(this.model);
}
在BookListView中:
this.collection.bind('add', this.renderBook);
this.book = this.options.book;
this.authors = this.options.authors;
this.authors.bind('select', this.queueBooks);
queueBooks: function(author) {
this.collection.add(author);
}
我猜测问题出在queueBooks:方法中,当模型被添加到。时 集合它会触发一个add事件,然后用于通过renderBook回调渲染书籍......所以我认为如果模型已经存在于集合中,它就不会再触发添加事件而不会渲染书籍....怎么解决这个?????? !!!!!!!!!!!!!!!
编辑:正如Derick所建议的那样 -
this.authors = this.options.authors;
this.authors.bind('select', this.renderBooks);
这完美无缺 但是这样在集合中没有生成添加事件,因为没有添加任何模型.....我之所以想要书籍模型的原因BookList集合是在booklist集合上有一个过滤器,以便根据价格和其他标准过滤它们,有没有办法实现这些功能?????????
答案 0 :(得分:1)
我猜测问题出在queueBooks:方法中,当时a model被添加到集合中,它会触发一个add事件 用于通过renderBook回调渲染书籍...所以我想如果 该模型已经存在于集合中,它不会触发添加 事件再次因此没有呈现书籍
这是正确的。您只能将模型添加到集合一次。当您尝试第二次添加时会抛出JavaScript错误。
你已经拥有了所需的一切,你只是在听错事件并以错误的顺序做事。您需要收听模型的select
事件,并使用它来显示模型,而不是将模型添加到集合中以显示模型。
this.authors = this.options.authors;
this.authors.bind('select', this.renderBook);