我遇到Backbone和Marionette的问题。我有一个带有集合的CompositeView,人们可以在其中发表评论,这一切都很好用,评论被添加并保存到服务器但我不希望视图更新并显示新添加的评论。我试过这个:
App.Views.CommentsView = Backbone.Marionette.CompositeView.extend({
template: '#article-comment-container',
itemViewContainer: 'ul',
itemView: App.Views.CommentView,
collectionEvents: {
"add": "modelAdded"
},
modelAdded: function(){
console.log('Please do nothing!');
}
});
但是该项仍然会被渲染到我调用的modelAdded函数之上的页面中。我可以在某个时候阻止这种情况发生吗?
在不同的场景中,我希望将新项目添加到列表顶部而不是底部。我是否必须覆盖整个appendHtml方法实现此目的?
答案 0 :(得分:0)
设置集合事件add
只是为该事件的队列添加另一个处理程序;它不会替换任何其他事件,因此仍会发生默认的牵线木偶行为。
我假设你在集合上调用create
方法来创建新的评论模型。如果是这种情况,您只需将silent
选项设置为true即可。现在add
事件不会触发,Marionette将不会为该模型创建和渲染视图。你可以这样做:
commentCollection.create(commentModel, {silent: true});
至于你关于前置的第二个问题,是的,我会覆盖appendHtml
方法。或者,为了使方法名称与实际情况保持一致,请创建一个名为prependHtml
的方法,然后覆盖renderItemView
方法以调用prependHtml
。