Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干(也包括木偶)尝试在集合开始时显示新记录,而不重新呈现整个集合_Javascript_Backbone.js_Marionette - Fatal编程技术网

Javascript 主干(也包括木偶)尝试在集合开始时显示新记录,而不重新呈现整个集合

Javascript 主干(也包括木偶)尝试在集合开始时显示新记录,而不重新呈现整个集合,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我试图在收藏开始时呈现一个项目(想象一下,如果你在facebook上发布一条新记录) 当我开始添加(响应,{at:0});在集合中,记录正确地插入到集合的0处,但呈现在项列表的底部。我很困惑,因为我以前做过这个,但我认为我在做的是一个黑客风格,只是重置和重新呈现的集合 我想知道如何处理这个问题,我应该在哪里绑定逻辑 是否在集合的add方法上?目前这是空的(但我使用的是木偶),我觉得这会覆盖主干的默认渲染。如何再次控制它,以便正确地将新项添加到列表中,而不必全部销毁并重新创建它。在木偶中,向视图中

我试图在收藏开始时呈现一个项目(想象一下,如果你在facebook上发布一条新记录)

当我开始添加(响应,{at:0});在集合中,记录正确地插入到集合的0处,但呈现在项列表的底部。我很困惑,因为我以前做过这个,但我认为我在做的是一个黑客风格,只是重置和重新呈现的集合

我想知道如何处理这个问题,我应该在哪里绑定逻辑


是否在集合的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将在呈现时更改顺序,不是吗?