我有一个包含一些(简单)import QtQuick 2.0
import QtQuick.Controls 2.0
ApplicationWindow {
Button {
onClicked: chat.sendMessage(...)
}
}
对的Object,如下所示:
key: value
var things = {
"0": "apple",
"1": "mango",
"2": "pear"
// ect...
};
中是否有内置函数或方法可用于侦听对象值的更改?
也许是这样的:
Object.prototype
我不介意使用jQuery,浏览器支持并不是首要任务,因此也欢迎使用非标准和/或自定义方法。< BR />
答案 0 :(得分:1)
您可以使用更通用的setter函数,并使用它(如果适用)(您可以控制设置值)。
this.timeout(20000);
答案 1 :(得分:1)
通常情况下,您可以使用一个函数来设置值并从那里调用它,但如果您必须确保在更改时调用它,则可以使用Proxy
。这允许您在设置属性时调用函数。
var trueThings = new Proxy(things, {
set: // your function here
});
EDIT 10/03/2016:
有一种更广泛支持的强制它通过该函数的方法,那就是创建一个shell对象,使用closure访问主对象。就像Proxy
一样,它包装对象(保持私有)并提供操作它的工具。您可以使用以下函数创建它:
function makeShell(obj) {
function setCallback(k, v, obj) {
// your callback here
}
return {
get: function(k) {
return obj[k];
},
set: function(k, v) {
setCallback(k, v);
obj[k] = v;
}
}
}
答案 2 :(得分:0)
您可以创建元素,将元素属性设置为对象属性,使用MutationObserver
var things = {
"prop-0": "apple",
"prop-1": "mango",
"prop-2": "pear"
// ect...
};
var obj = document.createElement("div");
for (var prop in things) {
obj.setAttribute(prop, things[prop])
};
var target = obj;
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
things[mutation.attributeName] = obj.getAttribute(mutation.attributeName);
console.log(obj.getAttribute(mutation.attributeName)
, things);
});
});
var config = {
attributeFilter: Object.keys(things)
};
observer.observe(target, config);
obj.setAttribute("prop-0", "abc");
答案 3 :(得分:0)
以下是最终产品及其Slayther answer的修改版本:
var things = {
"0": "apple",
set: function(key, val) {
var old = (this[key]) ? this[key] : null;
this["OLD_" + key] = old;
this[key] = val;
this.onchange(key, val, old);
},
onchange: function(key, value, old) {
// handle "onchange" business here
}
};
things.set("0", "pear");