【问题标题】:Ember multiple property changes but want to trigger single eventEmber 多个属性更改但想触发单个事件
【发布时间】:2012-11-09 21:50:43
【问题描述】:

我有一个用于日期选择器的 ArrayController,它具有 tofrom 属性。现在,当用户从 UI 中选择新的日期范围时,tofrom 值都会发生变化。

因此,tofrom 上的观察者函数会触发两次,以实现日期范围的一次更改。

我只想在每个日期范围更改时触发一次该功能。任何关于如何使用 ember 的建议

    app = Ember.Application.create();

    app.Time = Ember.ArrayController.create({

        to: null,
        from: null,
        rootElement: "#time",

        debug1: function() {
            this.set('to', 1);
            this.set('from', 2);
        },

        debug2: function() {
            this.setProperties( {
                'to': 3,
                'from': 4
            });
        },

        debug3: function() {
            this.beginPropertyChanges();
            this.set('to', 5);
            this.set('from', 6);
            this.endPropertyChanges();
        },

        search: function() {
            alert('called');
        }.observes('to', 'from')
    });

View in JS Fiddle

【问题讨论】:

  • 只观察 to 或 from 怎么样?由于当用户选择下一个日期时两者正在发生变化,因此仅依赖两个日期中的一个可能不起作用?
  • 还有其他方法可以改变 to 和 from 。所以观察者必须同时在两者上

标签: properties ember.js


【解决方案1】:

也许你可以在fromto 上引入一个计算属性,然后在这个属性上插入观察者。由于CP默认是缓存的,所以我认为观察者只会被触发一次。

date: function(){
 // return the computed date
}.property('from', 'to')

dateDidChange: function(){

}.observes('date')

编辑感谢您的小提琴,它似乎可以使用 setProperties 或 begin/end propertyChanges http://jsfiddle.net/Sly7/zf2q3/1/

【讨论】:

    【解决方案2】:

    您可以将观察者包裹在 Em.run.once

    _dateDidChange: function(){
      Ember.run.once(this, 'dateDidChange');
    }.observes('from', 'to'),
    
    dateDidChange: function() {
      // should be called only once
    }
    

    【讨论】:

    • @AnkurAgarwal Hum,我认为这比我做的更好。事实上,我已经要求 Ember.js 贡献者来看看这个。这就是他建议其他解决方法的原因。
    • Ankur,你能推断一下吗?我们正在考虑使观察者异步,因此您不必包装它,它会正常工作。
    • @Tchak 如果我使用这种方式,它将起作用。但是作为发布者订阅者范式,假设这个对象之外的任何人想要观察他们必须在此处明确声明的更改。这是一场噩梦,因为有时存在外部观察者,有时则不存在。在 sly7_7 的第一个回答中,外部观察者可以轻松观察,而无需显式声明,也无需额外的代码或处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多