ember removeObserver和addObserver

时间:2014-11-11 05:47:09

标签: ember.js

我有一个名为'checked'的数组属性,我正在观察,我想在更新属性时暂时禁用观察。 removeObserver和addObserver的正确语法是什么?

        applyPreReqs: function() {
            var currentContent = this.get('content');
            currentContent.entitlements.forEach(function(entitlement) {
                if (entitlement.checked && entitlement.prerequisiteEntitlementIds !== undefined) {
                    entitlement.prerequisiteEntitlementIds.forEach(function(prereq) {
                        currentContent.entitlements.forEach(function(item) {
                            if (item.id === prereq && !item.checked) {
                                Ember.set(item, 'checked', true);
                            }
                        });
                    });
                } else {
                    currentContent.entitlements.forEach(function(item) {
                        if (item.id !== entitlement.id && item.checked) {
                            Ember.removeObserver('content.entitlements.@each.checked', this, this.applyPreReqs);
                            Ember.set(item, 'checked', false); 
                            Ember.addObserver('content.entitlements.@each.checked', this, this.applyPreReqs);
                        }
                    });
                }
        }.observes('content.entitlements.@each.checked')

谢谢!

1 个答案:

答案 0 :(得分:0)

我不是你在这里做的所有事情,但这是你删除阵列观察者然后进行更新然后在观察被触发时添加观察的方法。

applyPreReqs: function() {
    var currentContent = this.get('content');
    currentContent.entitlements.forEach(function(entitlement) {
        ....
    }
    currentContent.entitlements.removeArrayObserver(this);
}.observesBefore('content.entitlements.@each.checked')

applyPreReqs: function() {
    var currentContent = this.get('content');
    currentContent.entitlements.forEach(function(entitlement) {
        ....
    }
    currentContent.entitlements.addArrayObserver(this);
}.observes('content.entitlements.@each.checked')

我希望这会有所帮助 干杯