【发布时间】:2014-07-31 09:38:30
【问题描述】:
我一直在 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 或输出到控制台。我的业务逻辑要求我在name 更改时立即更新someOtherPropety,我更愿意将此逻辑封装在我的模型中。
显然,这只是一个示例,但我有依赖于立即执行的业务规则。
【问题讨论】:
-
你真正想要什么,我想你知道这是预期的行为。
标签: javascript angularjs object.observe