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);