2012-08-29 95 views
2

我正在为iPad构建一个web应用程序,最近我在某些性能问题上运行。我在左边有一个新闻列表,右边是一个新闻视图。当你点击一条新闻时,它会显示正确的消息。Backbone.js - 更新视图与渲染新视图

目前,我每次点击新闻时都会生成一个新视图。现在我的视图模板对于每个新闻都保持不变,并且我想知道如果只更新所选新闻内容右侧的视图,而不是每次生成新的视图,我是否会获得更好的性能。

如果是这样,是否有更新视图与新的模型数据或只是简单的jQuery的骨干方式?

+0

这方面有趣的文章:http://ianstormtaylor.com/break-apart-your-backbonejs-render-methods/ – stusmith

回答

0

可以像这样简单的事情:

// code no tested 
var NewsView = Backbone.View.extend({ 
    changeCollection: function(collection){ 
    this.collection = collection; 
    this.render(); 
    } 
}); 
1

至于性能也越高,是否支付给刚刚更新它的部分将很可能取决于你的观点的复杂程度,又有多少被改变。

这就是说,你可以有一个视图你右手边的新项目,然后只要将它的模型和triggerchange 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)并附加新选择的模型的视图。