Backbone.js 如何在引导/创建时将主干视图与连接的模型同步?

Backbone.js 如何在引导/创建时将主干视图与连接的模型同步?,backbone.js,backbone-views,Backbone.js,Backbone Views,通常我有一个视图,在该视图上我将侦听器设置为模型更改,如下所示(合并): 我正在寻找引导视图的首选/主干方式,即:我希望我的视图(表单字段或您拥有的内容)在创建时与模型同步。使用上述方法,这是不可能的,因为模型是在附加视图之前创建的,这会导致在初始化视图的侦听器之前触发模型更新/更改 当然,我可以编写一些自定义的bootstapping逻辑来手动调用侦听器函数,但由于这一定是一个常见的问题,我正在寻找一些最佳实践建议,或者更好的是,我需要设置一个主干交换机来实现这一点。这听起来很傻,但我通常做的

通常我有一个视图,在该视图上我将侦听器设置为模型更改,如下所示(合并):

我正在寻找引导视图的首选/主干方式,即:我希望我的视图(表单字段或您拥有的内容)在创建时与模型同步。使用上述方法,这是不可能的,因为模型是在附加视图之前创建的,这会导致在初始化视图的侦听器之前触发模型更新/更改


当然,我可以编写一些自定义的bootstapping逻辑来手动调用侦听器函数,但由于这一定是一个常见的问题,我正在寻找一些最佳实践建议,或者更好的是,我需要设置一个主干交换机来实现这一点。

这听起来很傻,但我通常做的是渲染()在视图创建之后

对我来说,变更事件的全部要点是通知变更。事实上,它也是在创建时触发的(作为“与默认值相比发生了更改”),这与其说是一种深层次的影响,不如说是一种副作用

从这个意义上说,当我创建视图并为其提供一个现有模型时,我希望模型在某种程度上已经准备就绪,因此我应该能够立即执行render()。因此,我的引导代码更像:

var someViewInstance = new someViewType({
   model: someModelInstance
});
someViewInstance.render()
或者,如果您觉得有冒险精神,也可以在绑定后的initialize()中执行此操作(我个人不喜欢这样做,因为在处理子视图时,很难确切知道您希望何时进行渲染,特别是在依赖于需要准备DOM的库且无法在分离的节点上工作时)

总而言之,虽然你的问题很常见,但对我来说,它不需要任何复杂的解决方案:你有一个render()函数将你的模型转换成DOM,你的模型可能已经准备好了,也可能还没有准备好,但它是存在的,所以你把它传递给视图,然后在创建视图后手动进行第一次渲染,因为你知道这需要发生。然后绑定到更改,以防模型更新,从而相应地更新DOM

旁注:在模型集合的情况下,当模型根本没有准备好时,它可能甚至不应该有实例,并且应该让集合在它出现时为您提供一些添加/删除事件

var someViewInstance = new someViewType({
   model: someModelInstance
});
someViewInstance.render()