我一直在 Chrome v36 中试验 Object.observe。我最初的意图是在我的模型中将其用于业务逻辑,但异步行为似乎使这成为不可能。我将其归结为以下示例:
function Person(name) {
this.name = name;
this.someOtherProperty = null;
this.watch = function()
{
var self = this;
Object.observe(this, function(changes){
for(var i = 0; i < changes.length; i++)
{
if(changes[i].name == "name")
{
self.someOtherProperty = changes[i].newValue;
console.log("Property Changed");
}
}
});
}
}
$(function () {
var p = new Person("Alice");
p.watch();
p.name = "Bob";
$("#output").text("Output: "+ p.someOtherProperty);
console.log("Output");
});
JSFiddle链接,带有 jQuery。
我的问题是在“属性更改”之前调用了“输出”。有什么方法可以使 Object.Observe 同步,还是我应该这样做更好?(我正在使用 AngularJS,顺便说一句。)
这里的问题不是向 DOM 添加文本或输出到控制台。someOtherPropety
我的业务逻辑要求我在更改时立即更新name
,我更愿意将此逻辑封装在我的模型中。
显然,这只是一个示例案例,但我有依赖于立即执行的业务规则。