我在Backbone中设计的应用程序存在架构难题。
我有级联,分层视图,即根视图有标题,中间和页脚视图。它们中的每一个都包括一些较低级别的视图,例如标题视图由选项卡,首选项和登录/注销视图组成。这只是一个视图聚合。
我还有一个配置模型,它有几个属性,它是通过AJAX(标准骨干提取)加载的。使用弹出窗口,菜单等在界面中显示模型属性,以使用户能够选择他的设置。当用户更改设置时,可能需要重新渲染应用程序的许多部分。配置模型包含“状态”属性(例如,在通过AJAX获取的currentPeriod
中使用属性periods
)
在内部视图中,我使用listenTo(this.model, 'change:currentPeriod', this.render)
在配置中将此视图重新渲染时更改。
我在model :: parse
中设置了所有默认状态属性。问题是,如果我有10个属性要设置(解析结束后),并且可能每个属性都会触发一些事件,其中很多都将被多次运行(这不是我想要的)。
我一直在寻找使用{silent:true}选项在parse中设置当前状态属性的可能性 - 然后不会触发任何事件。我希望你们中的一些人已经遇到了同样的问题并且存在一个简单的解决方案。提前谢谢!
答案 0 :(得分:0)
您可以触发所有事件“onSet”/“onChange”或无;换句话说,您可以传递silent: true
,但不是,但它是二元选择。你不能说“设置foo,顺便说一句,只发动这个事件,不是那个”。
如果您想要这种级别的控制,我建议您使用silent: true
,然后手动触发您想要的事件。
如果这对您不起作用,我建议您更改绑定事件的方式,以便只绑定给定事件一次;这样就不会重复了。如果 不起作用,你可以让你的渲染方法工作,即使它多次运行;这样事件可以多次触发渲染,但不会伤害任何东西。
答案 1 :(得分:0)
在fetch
期间,对options
和parse
之间set
的引用保持不变,因此您可以更改options.silent
的值并进行更改结束了。
See this fiddle以此为例。
答案 2 :(得分:0)
执行此操作的一种方法是创建代理(裸Backbone.Events
个对象)并让您的视图听取它。代理对象将在模型上侦听all
并简单地排队模型触发的事件(消除重复事件),直到模型触发“我已完成”事件(最后触发) parse
);然后代理将触发所有排队的事件并刷新队列。