【发布时间】:2016-03-06 01:49:46
【问题描述】:
下面是我目前拥有的代码,它在每次添加或删除模型时重新呈现一个 collectionView。但是,它似乎效率低下,因为它每次都必须渲染整个事物,而我真正需要的是一个要删除的模型视图或要添加的模型视图。那么我该如何实现呢?
var CollectionView = Marionette.CollectionView.extend({
childView: ModelView,
initialize: function() {
[ "add", "remove" ].forEach(function(eventName) {
this.listenTo(this.collection, eventName, this.render, this);
}.bind(this));
}
});
提前感谢您提供的任何帮助!
【问题讨论】:
-
你能分享一个minimal reproducible example我们可以一起玩吗..?
-
@TJ 好的,我已经在 JSFiddle here 上放了一个例子(因为必须有很多行代码才能让它工作,即使我没有包含路由器或任何其他真的是多余的功能)。目前的示例创建了 800 个 ItemView,并通过 CollectionView 将它们显示在页面上。当您单击删除按钮时,模型将从集合中删除,并且视图会自动重新渲染。但是,页面上的项目越多,重新渲染所需的时间就越长,这意味着它正在再次渲染整个事物......
-
...而不是仅仅从 DOM 中删除单个已删除的 ItemView,这将是最有效的。例如,尝试更改“开始”事件处理程序中的循环,使其仅创建 8 个项目而不是 800 个项目,然后删除一个项目,它的执行速度明显更快。
标签: javascript backbone.js marionette