Javascript 主干(也包括木偶)尝试在集合开始时显示新记录,而不重新呈现整个集合
我试图在收藏开始时呈现一个项目(想象一下,如果你在facebook上发布一条新记录) 当我开始添加(响应,{at:0});在集合中,记录正确地插入到集合的0处,但呈现在项列表的底部。我很困惑,因为我以前做过这个,但我认为我在做的是一个黑客风格,只是重置和重新呈现的集合 我想知道如何处理这个问题,我应该在哪里绑定逻辑Javascript 主干(也包括木偶)尝试在集合开始时显示新记录,而不重新呈现整个集合,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我试图在收藏开始时呈现一个项目(想象一下,如果你在facebook上发布一条新记录) 当我开始添加(响应,{at:0});在集合中,记录正确地插入到集合的0处,但呈现在项列表的底部。我很困惑,因为我以前做过这个,但我认为我在做的是一个黑客风格,只是重置和重新呈现的集合 我想知道如何处理这个问题,我应该在哪里绑定逻辑 是否在集合的add方法上?目前这是空的(但我使用的是木偶),我觉得这会覆盖主干的默认渲染。如何再次控制它,以便正确地将新项添加到列表中,而不必全部销毁并重新创建它。在木偶中,向视图中
是否在集合的add方法上?目前这是空的(但我使用的是木偶),我觉得这会覆盖主干的默认渲染。如何再次控制它,以便正确地将新项添加到列表中,而不必全部销毁并重新创建它。在木偶中,向视图中的集合添加新项的默认方法是使用jQuery的
append
方法。CollectionView
类型有一个名为appendHtml
的方法,用于执行实际的追加。(见附件)
但是,您可以在特定的集合视图中轻松重写此方法,并将新模型附加到需要添加的任何位置
在您的情况下,如果您总是希望将新模型前置到列表的顶部,那么更改集合视图以执行以下操作非常简单:
Backbone.Marionette.CollectionView.extend({
appendHtml: function(cv, iv){
cv.$el.prepend(iv.el);
}
});
请注意,cv
是集合视图实例,iv
是集合中模型的项目视图实例
如果需要执行更复杂的操作,如在现有的HTML节点集合中查找确切位置,也可以在appendHtml
函数中执行。当然,这比只做前置而不是追加要复杂得多,但这仍然是可能的
希望能有所帮助。这可能是一个很老的问题,但我还是会发布我的解决方案。。。 它通过重写appendHtml函数,根据新模型添加到集合中的方式(取消移动/添加),为itemViewContainer添加新模型
appendHtml: function(collectionView, itemView, index){
if(index > 0) {
collectionView.$el.find(this.itemViewContainer).append(itemView.el);
} else {
collectionView.$el.find(this.itemViewContainer).prepend(itemView.el);
}
},
感谢您的回复,我相信这会对未来有所帮助@ChrisBarry还看到了在上的线程,以寻找一种方法将项目按顺序插入到呈现的集合中。但是用prepend替换append将在呈现时更改顺序,不是吗?