当模型改变时,Javascript /backbone事件

javascript/backbone events when model changed

本文关键字:backbone 事件 Javascript 模型 改变      更新时间:2023-09-26

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

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

我也有一个配置模型,它有几个属性,它是通过AJAX(标准骨干获取)加载的。模型属性通过弹出窗口、菜单等方式显示在界面中,使用户可以选择自己的设置。当用户更改设置时,应用程序的许多部分可能需要重新渲染。配置模型保存"状态"属性(例如,属性currentPeriod在通过AJAX获取的periods中使用)

内部视图,我使用listenTo(this.model, 'change:currentPeriod', this.render)使这个视图重新渲染时,任何改变在配置。

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

我正在寻找一种可能性,以设置当前状态属性内解析{silent:true}选项-然后没有事件将被触发。我希望你们中的一些人已经遇到了同样的问题,并且存在一个简单的解决方案。提前感谢!

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

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

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

fetch期间,对options的引用在parseset之间保持不变,因此您可以更改options.silent的值,并且更改将延续

这样做的一种方法是创建一个代理(一个裸Backbone.Events对象),并让您的视图侦听它。代理对象将监听模型上的all,并简单地将模型触发的事件排队(消除重复事件),直到模型触发"I'm done"事件(您将在parse结束时触发);然后代理将触发所有排队的事件并刷新队列。