2017-01-24 48 views
1

js代理setter不會在aurelia中被解僱。我有一個在我的組件注入配置:Aurelia Proxy不會觸發setter

const config = { prop: 'value' }; 
export default new Proxy(config, { 
    get: function(obj, prop) { 
     console.log('get ' + prop + ' = ' + obj[prop]); 
     return obj[prop]; 
    }, 
    set: function(obj, prop, value) { 
     console.log('set ' + prop + ' = ' + value); 
     obj[prop] = value; 
     return true; 
    }, 
}); 

當我改變一個屬性的getter火災,但不執行二傳功能,即使在配置對象的值更改。

回答

2

您的問題不是Aurelia問題,您使用的代理方式不正確。我已經把一個代理設置器和getter的例子用在了一起。

如果您在Chrome中打開開發者控制檯,則可以在瀏覽器中嘗試下列代碼。重要的是要注意的是使用返回的代理,而不是原始對象。您需要使用代理。

let config = { prop: 'value' }; 
let configProxy = new Proxy(config, { 
    get: function(target, property) { 
     return target[property]; 
    }, 
    set: function(target, property, value) { 
     if (value.length > 3) { 
     target[property] = value; 
     } else { 
     throw new ReferenceError(property + ' cannot be set'); 
     } 
    } 
}); 

// Setting a value less than 3 characters will trigger an error 
configProxy.prop = 'D'; 

// This is fine 
configProxy.prop = 'Dwayne'; 
+0

我沒有看到與我的例子不同,除了if語句。我已經在配置對象的後續操作中使用代理 - >導出默認的新代理服務器... – Chris