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
Backbone.js 主干替换视图/获取视图位置_Backbone.js - Fatal编程技术网

Backbone.js 主干替换视图/获取视图位置

Backbone.js 主干替换视图/获取视图位置,backbone.js,Backbone.js,我有一个不是最佳设计的应用程序。我没有时间重新编写,需要找到以下问题的解决方案: 在我的应用程序中,可以将新元素添加到集合中,集合视图中有一个函数决定是在顶部还是底部插入新元素: if (someLogic) { this.$container.prepend( newEl ); } else { this.$container.append( newEl ); } 还可以编辑元素;在这种情况下,应用程序首先销毁旧视图(如果有): item.trigger('destroyView')

我有一个不是最佳设计的应用程序。我没有时间重新编写,需要找到以下问题的解决方案:

在我的应用程序中,可以将新元素添加到集合中,集合视图中有一个函数决定是在顶部还是底部插入新元素:

if (someLogic) {
  this.$container.prepend( newEl );
} else {
  this.$container.append( newEl );
}
还可以编辑元素;在这种情况下,应用程序首先销毁旧视图(如果有):

item.trigger('destroyView');
然后渲染它。不知何故,它被渲染在与以前相同的位置:

+--------+           +--------+
|   x1   |           |   x1   |
+--------+           +--------+
|   x2   |           |   x2   |
+--------+   ====>   +--------+
|   x3   |           |   x3a  |
+--------+           +--------+
|   x4   |           |   x4   |
+--------+           +--------+
现在,由于某些更改,编辑的元素在集合视图的顶部或底部呈现

我的问题是:如何在与以前相同的位置渲染它。
如前所述,我试图在模型上添加一个侦听器,但是一些编程逻辑似乎被破坏了

有没有办法:

  • 是否将现有视图替换为新的渲染视图

  • 通过迭代容器视图元素,获得相应的模型?(模型有一个表示顺序的属性,因此我可以使用
    insertAfter
    insertBefore


  • 我发现解决办法比我想象的要简单

    在获取新模型的地方,我可以确定模型是否已经存在。
    如果它存在,我只需发送一个触发器,而不是销毁旧视图并再次渲染它,以便视图在原来的位置再次渲染:

    容器视图:

    var model = this.collection.findWhere({id:newInteractionData.id});
    if (model) {
      model.trigger('render');
    } else {
      // here comes the old 'render' code
    }
    
    项目视图:

    this.listenTo(this.model, "render", this.render);