2015-10-21 21 views
0

我有一个Backbone视图,我使用Handlebars在我的视图中加载模板。渲染模板的一部分

我有一个列表#list在模板中必须在视图中更新,然后它需要重新呈现。 我想重新渲染只有部分已经改变,所以只有#list没有重新加载我所有的DOM(以及所有我所拥有的Handlebars助手)。

我尝试这样做:

template: Handlebars.compile(templateHtml), 

render: function() { 
    this.$el.html(this.template(this.model.toJSON()); 
}, 

renderList: function() { 
    var html = this.template(this.model.toJSON()); 
    var selector = "#list"; 

    this.$el.find(selector).replaceWith($(selector, html)); 
} 

但这是非常缓慢的,因为我觉得它重新呈现改变#list内容,因为我需要之前的所有DOM。

有没有更好的方法来做到这一点?

#list的内容放在另一个模板中并将其作为subView加载它是一个好主意吗? 在这种情况下,如何从第一个视图触发列表更新?

感谢

回答

1

最好是通过创建一个专门的渲染方法,这是我explained here更新您的渲染视图的只是一部分。

在你的情况下,它看起来像你必须从模板构建整个html视图,只是为了更新它的一部分。如果你想将模板保存为一个模板,这是很整洁的。

如果真的有很多的超越list模板怎么回事,你可以在你的视图中的两个模板,一个将是一般的,而另一个只是列表中,您将安装到第一个是全局渲染,能够更新列表的好处。

此外,如果#list只是一个列表的容器,则可能甚至不需要第二个模板。我可以想象这可能是一个<ul>标记,您将在全局渲染过程中将其安装在正确的位置,然后使用其他自定义渲染方法更新它。

而且,我写到这里的例子,这可能是你的情况可能有所帮助: Backbone.js fetch() JSON to model get() returnes undefined - 在本例中有一个模板,即对列表的容器,该列表是由它自己收集单独管理。

只是有些想法。