setAttribute阻止观察者

时间:2014-02-20 19:22:40

标签: javascript dom setattribute mutation-observers

我正在编写我的HTML组件,它侦听元素上的属性变化,并根据属性的值更新自我模型。这是通过使用Mutation观察者完成的:

var $element = document.createElement('div');
var observer = new MutationObserver(function(mutations) {
    for (var i = 0; i < mutations.length; i++){
        var mutation = mutations[i];
        if (mutation.type === "attributes"){
            var attr = mutation.attributeName;
            $element[attr] = parseAttr($element.getAttribute(attr));
        }
    }
})

observer.observe($element, {
    attributes: true
})

反向操作继续改变价值:

Object.defineProperty($element, "some_property" ,{
    configurable: false,
    enumerable: false,
    get: function(){ return this._value},
    set: function(v){
        this._value = v;

        //There’s trouble
        this.setAttribute("some_property", stringify(v));
    }
});

这样设置元素的属性会导致属性观察者触发器,而触发器又会尝试设置值,依此类推。 有没有办法setAttribute没有突变观察者被触发? 在设置值然后打开它之前关闭观察者是否更好:

observer.disconnect();
setAttribute(name, value);
observer.observe($element, observeConfig);

或设置标志以忽略突变事件:

ignoreOneAttrChange = true;
setAttribute(name, value);

...
//in observer event
if (ignoreOneAttr) { ignoreOneAttr = true; return } 
...

0 个答案:

没有答案
相关问题