0

使用 Ember.js,我有以下场景:

My Class 有一个属性,需要在实例化时进行一些操作。为了实现这一点,我调用了一个从 init 开始工作的函数。我还想观察这个属性变化,这样如果消费者在运行时设置新值,我将在新值上运行我的操作逻辑。问题是,作为初始化流程的一部分,我在操作后将自己设置为属性的新值,这会调用触发器(如预期的那样)。我不希望这段代码运行两次。

考虑以下代码。'here' 将在控制台打印两次。

    var MyObj = Ember.Object.extend({

        prop: null,

        init: function init() {

            this._super.apply(this, arguments);
            this._applyProp();

        },

        _applyProp: function prop() {

            console.log('here');

            var prop = this.get('prop');

            if (prop === 'Dan') {

                prop = 'Hi' + prop;
            }

            this.set('prop', prop);

        }.observes('prop')

    });

    MyObj.create({prop: 'Dan'});

任何建议将不胜感激。

4

1 回答 1

3

让观察者设置它正在观察的属性似乎是个坏主意。您的特定示例可以使用计算属性 getter/setter 来实现:

var MyObj = Ember.Object.extend({
  prop: function(key, value) {
    if (value !== undefined) {
      if (value == 'Dan') {
        return 'Hi ' + value;
      }
      return value;
    }
  }.property(),
});
MyObj.create({prop: 'Dan'});

这足以涵盖您的用例吗?

于 2012-11-15T05:38:48.827 回答