Jquery Backbone.js单击事件无法持续工作

Jquery Backbone.js单击事件无法持续工作,jquery,ruby-on-rails-3,json,backbone.js,underscore.js,Jquery,Ruby On Rails 3,Json,Backbone.js,Underscore.js,我正在使用rails api开发一个backbone.js应用程序,该应用程序提供json,如图所示: { "name": "dan brown", "genre": "fiction", "books": [{ "title": "Da vinci Code", "price": "50" }, { "title": "Some other name", "price": "45"

我正在使用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"
    }]
}
待办事项:1。在页面左侧显示作者列表。 2.当用户单击作者时,相应的书籍应显示一个链接,以将\添加到\购物车 3.最后,当用户点击这本书时,它应该会显示关于这本书的更多细节

进度:1。我可以使用backbone.js获取作者列表,并显示在左侧(authors.fetch()) 2.当用户点击时,我可以让那个作者的书显示出来

问题:现在,当用户第一次单击作者1时,它将显示该作者的书籍,但是在单击其他作者后,如果用户再次单击同一作者1,则不会显示任何书籍。。似乎用户主干作者模型在单击一次后丢失了单击事件…我希望单击事件在作者身上保持不变

怎么办

去哪里

非常感谢您的帮助和建议

在AuthorView中

事件:{
“单击。作者”:“选择”
},
选择:函数(){
this.collection.trigger('select',this.model);
//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:函数(作者){
this.collection.add(作者);
}
我猜问题在于queueBooks:方法,当模型被添加到 collection它会触发一个add事件,然后通过renderBook回调来渲染书籍…因此我认为如果集合中已经存在该模型,它不会再次触发add the事件,从而不会渲染书籍…如何解决此问题

编辑:如德里克所建议-

this.authors=this.options.authors;
this.authors.bind('select',this.renderBooks);
这非常有效但这样,集合中不会生成添加事件,因为没有添加任何模型…..我希望图书列表集合中的图书模型在图书列表集合中有一个过滤器,以便可以根据价格和其他条件对其进行过滤,有没有办法实现这些功能

我猜问题在于queueBooks:方法,当 模型被添加到集合中,它触发一个add事件,然后 用于通过renderBook回调渲染书籍…所以我认为如果 该模型已存在于集合中,但它不会触发添加 事件再次发生,因此不会渲染书本

这是正确的。只能将模型添加到集合一次。当您第二次尝试添加它时,它将抛出一个JavaScript错误

你已经准备好了你所需要的一切,你只是在听错误的事件,并以错误的顺序做事。您不需要将模型添加到集合中以显示它,而需要监听模型的
选择
事件,并使用该事件来显示它

this.authors = this.options.authors;
this.authors.bind('select', this.renderBook);
我猜问题在于queueBooks:方法,当 模型被添加到集合中,它触发一个add事件,然后 用于通过renderBook回调渲染书籍…所以我认为如果 该模型已存在于集合中,但它不会触发添加 事件再次发生,因此不会渲染书本

这是正确的。只能将模型添加到集合一次。当您第二次尝试添加它时,它将抛出一个JavaScript错误

你已经准备好了你所需要的一切,你只是在听错误的事件,并以错误的顺序做事。您不需要将模型添加到集合中以显示它,而需要监听模型的
选择
事件,并使用该事件来显示它

this.authors = this.options.authors;
this.authors.bind('select', this.renderBook);

谢谢你真是太棒了。。。。。。如果可能的话,你能建议一种在藏书集上实现过滤的方法吗?谢谢,非常好用。。。。。。如果可能的话,你能建议一种对藏书进行过滤的方法吗