我正在为iPad构建一个web应用程序,最近我在某些性能问题上运行。我在左边有一个新闻列表,右边是一个新闻视图。当你点击一条新闻时,它会显示正确的消息。Backbone.js - 更新视图与渲染新视图
目前,我每次点击新闻时都会生成一个新视图。现在我的视图模板对于每个新闻都保持不变,并且我想知道如果只更新所选新闻内容右侧的视图,而不是每次生成新的视图,我是否会获得更好的性能。
如果是这样,是否有更新视图与新的模型数据或只是简单的jQuery的骨干方式?
我正在为iPad构建一个web应用程序,最近我在某些性能问题上运行。我在左边有一个新闻列表,右边是一个新闻视图。当你点击一条新闻时,它会显示正确的消息。Backbone.js - 更新视图与渲染新视图
目前,我每次点击新闻时都会生成一个新视图。现在我的视图模板对于每个新闻都保持不变,并且我想知道如果只更新所选新闻内容右侧的视图,而不是每次生成新的视图,我是否会获得更好的性能。
如果是这样,是否有更新视图与新的模型数据或只是简单的jQuery的骨干方式?
可以像这样简单的事情:
// code no tested
var NewsView = Backbone.View.extend({
changeCollection: function(collection){
this.collection = collection;
this.render();
}
});
至于性能也越高,是否支付给刚刚更新它的部分将很可能取决于你的观点的复杂程度,又有多少被改变。
这就是说,你可以有一个视图你右手边的新项目,然后只要将它的模型和trigger
的change event
或致电视图中的refresh
方法。像
var NewsItemView = BackBone.View.extend({
initialize: function() {
this.model.bind('change', this.refresh, this);
},
refresh: function() {
this.$el.find('#partIWantToUpdate').html(this.model.get('someField'));
}
})
然后东西,而然后创建一个新的视图,你只要将它的模型
newItemView.model = newsModel;
newsModel.trigger('change');
或者干脆忘掉结合change事件并调用方法直接
newItemView.refresh();
另一种选择是,您可以为每个新闻项目创建一个视图,并在您的收藏视图中缓存该视图,然后每次点击新闻项目时您都可以使用detach
(这是importa nt,你detach
,而不是remove
作为删除也将删除任何绑定事件)当前视图从DOM
(以及当前视图的el
)并附加新选择的模型的视图。
这方面有趣的文章:http://ianstormtaylor.com/break-apart-your-backbonejs-render-methods/ – stusmith