0

我在使用 Backbone 设计的应用程序时遇到了架构困难。

我有级联的、分层的视图,即根视图有页眉、中间和页脚视图。它们中的每一个都由一些较低级别的视图组成,例如标题视图由选项卡、首选项和登录/注销视图组成。这只是一个视图聚合。

我还有一个配置模型,它有几个属性,它是通过 AJAX(标准主干提取)加载的。模型属性使用弹出窗口、菜单等显示在界面中,以使用户能够选择他的设置。当用户更改设置时,可能需要重新渲染应用程序的许多部分。配置模型包含“状态”属性(例如,其中currentPeriod使用的属性是periods通过 AJAX 获取的)

在视图内部,我用来在配置中发生任何更改时重新渲染listenTo(this.model, 'change:currentPeriod', this.render)此视图。

我在 model:: 中设置了所有默认状态属性parse。问题是,如果我要设置 10 个属性(解析结束后),并且可能每个属性都会触发一些事件,其中许多会运行多次(这不是我想要的)。

我正在寻找一种可能性,可以使用 {silent:true} 选项在 parse 中设置当前状态属性 - 然后不会触发任何事件。我希望你们中的一些人已经遇到过同样的问题,并且有一个简单的解决方案。提前致谢!

4

3 回答 3

0

一种方法是创建一个代理(一个裸Backbone.Events对象)并让您的视图监听它。代理对象将监听all模型并简单地将模型触发的事件排队(消除重复事件),直到模型触发“我完成了”事件(您将在结束时触发parse);然后代理将触发所有排队的事件并刷新队列。

于 2013-06-06T01:14:32.273 回答
0

您可以触发所有事件“onSet”/“onChange”或不触发;换句话说,你可以通过silent: true,也可以不通过,但这是一个二元选择。你不能说“设置 foo,顺便说一下,只触发这个事件,而不是那个”。

如果您想要那种级别的控制,我建议您使用silent: true然后手动触发您想要的事件。

如果这对您不起作用,我建议您更改绑定事件的方式,以便您只绑定给定事件一次;这样就不会重复了。如果不起作用,你可以让你的渲染方法工作,即使它运行了多次;这样事件可以触发多次渲染,但不会伤害任何东西。

于 2013-06-04T18:38:02.283 回答
0

在和之间fetch的引用options保持不变,因此您可以更改 的值并且更改将继续。parsesetoptions.silent

有关此工作的示例,请参见this fiddle 。

于 2013-06-05T13:27:56.463 回答