10

我有一个用于日期选择器的ArrayController,其属性. 现在,当用户从UI 中选择新的日期范围时,无论值更改还是值更改。

因此,对于日期范围的一次更改观察者往返的函数会触发两次。

我想在每个日期范围更改时仅触发一次该功能。任何关于如何使用 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')
    });

在 JS Fiddle 中查看

4

2 回答 2

12

from也许您可以在and上引入一个计算属性to,然后将观察者插入该属性。由于默认情况下会缓存 CP,因此我认为观察者只会被触发一次。

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

dateDidChange: function(){

}.observes('date')

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

于 2012-11-09T22:48:52.103 回答
4

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

_dateDidChange: function(){
  Ember.run.once(this, 'dateDidChange');
}.observes('from', 'to'),

dateDidChange: function() {
  // should be called only once
}
于 2012-11-14T16:58:39.643 回答