当模型改变时,Javascript /backbone事件
javascript/backbone events when model changed
我在使用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
的引用在parse
和set
之间保持不变,因此您可以更改options.silent
的值,并且更改将延续
这样做的一种方法是创建一个代理(一个裸Backbone.Events
对象),并让您的视图侦听它。代理对象将监听模型上的all
,并简单地将模型触发的事件排队(消除重复事件),直到模型触发"I'm done"事件(您将在parse
结束时触发);然后代理将触发所有排队的事件并刷新队列。
- '单击'事件在Backbone中消失.使用流沙后查看
- Backbone fetch中的Ajax在fetch调用退出后完成,因此fetch调用中没有成功/失败事件
- 将Backbone.View重新注入DOM,保留事件而不是创建新事件
- Backbone.js ModelBinder将默认事件更改为keyup
- 我应该如何在backbone.mariente中测试/监视此类事件
- 在 Backbone - 在 CoffeeScript 中触发和侦听不同类的事件
- 如何将参数传递给backbone.js中事件对象中绑定的函数
- 将Backbone事件与HTML5视频播放事件结合使用
- 单击文档时的Backbone JS事件
- Can-Backbone视图在一个html元素上有两个不同的事件
- Backbone.js事件未启动
- JS/Backbone/Chaplin 事件处理程序未触发
- 访问谷歌地图事件中的Backbone.View功能
- Backbone.view.extend:如何声明事件
- 点击事件未启动!(backbone.js)
- 在Backbone.js视图中拖动gabilly.js事件
- 在 Backbone 中,为什么我在执行 fetch() 时无法触发“重置”事件
- 未激发具有Backbone DOM元素的Backbone事件
- 当模型改变时,Javascript /backbone事件
- 动态设置子View $el并触发Backbone事件