Backbone 中的模型更改渲染

Posted

技术标签:

【中文标题】Backbone 中的模型更改渲染【英文标题】:Model change rendering in Backbone 【发布时间】:2013-06-26 18:23:31 【问题描述】:

我遇到的大多数 Backbone 教程和示例都对您的模型提出了类似的建议:

this.model.on('change', this.render, this);

在我的特定情况下,我正在为我的模型创建一个视图 form,并且这些字段与模型属性相关联。当用户更新form 上的字段时,模型也应该更新。这不是问题,因为我将事件绑定到触发适当代码以更新我的模型的字段。

然而,我遇到的问题是我还希望在模型更新时更新视图(如上面提到的无处不在的更改事件绑定)。这会导致视图在任何时候更新字段时重新呈现自身,因为底层模型正在发生变化。所以现在每当我更改form 的值时,我的视图都会被重绘。这既低效,又会导致许多令人沮丧的错误(例如失去焦点)。

这个问题一般是怎么处理的?

【问题讨论】:

不要渲染模型更改的视图。使用this.render 在需要时渲染它 @pvnarula:不过,这意味着如果模型通过视图之外的任何内容发生更改,我的视图将不会更新。您是否建议永远不要发生这种情况? 顺便说一句,在视图中侦听模型更改的首选方法是this.listenTo(this.model, 'change', this.render),因为当视图被删除时,这不会造成内存泄漏。 @Andrew:谢谢你的提示;我会更新我的代码。 【参考方案1】:

http://backbonejs.org/#Events-catalog

如果您不希望模型更改触发视图的渲染,请使用silent: true。在 Backbone 的最后一个版本中,这将使更改完全静音(之前它只是关闭,直到下一次非静音更改)。因此,当对模型的更改来自某些用户输入时,请使用 silent 标志。

【讨论】:

【参考方案2】:

如果您想在不触发更改事件事件的情况下更新模型,您可以通过调用来实现,

this.model.set('val', newval, silent:true);

【讨论】:

以上是关于Backbone 中的模型更改渲染的主要内容,如果未能解决你的问题,请参考以下文章

Backbone.stickit 和 html-form:如何只保存(补丁)更改的属性?

使用backbone.js 从视图访问模型数据

Backbone 中仅客户端的属性

Backbone.js:更改属性列表的智能更新

多次渲染时,Backbone 视图事件不起作用

backbone入门系列基本组成部分