【发布时间】:2013-01-06 11:16:24
【问题描述】:
我有一个用户模型(Backbone.js),我想更新其设置属性,然后将其保存到服务器。设置是 JSON 格式,我设置它的方式是设置是字符串版本,settingsJSON 是对象版本。我将函数绑定到每个函数的更改事件,以便当一个函数更改时,它会更新另一个函数。
我遇到的问题是 save 方法在更改的处理程序完成运行之前运行。有什么办法可以确保该模型的所有事件处理程序都是完整的或类似的东西?
我怎么称呼它:
currentUser.get('settingsJSON').apps = appsEnabled;
currentUser.save();
我的事件处理程序:
Initialize: function() {
var that = this;
this.on("change:settingsJSON", function(model){
model.set({settings: JSON.stringify(model.get('settingsJSON'))});
});
this.on("change:settings", function(model){
model.set({settingsJSON: JSON.parse(model.get('settings'))});
});
}
@fencliff:
当我运行它并正常工作时,更改事件正在触发,我让它将新的设置字符串打印到控制台。
您确定它们是同步调用的吗?我将console.log('changed') 添加到.on(change) 的末尾,并将console.log('saved') 直接放在currentUser.save() 之后,每次控制台读取:
saved
changed
现在我刚刚制作了它,以便在保存之前将 JSON 字符串化并直接保存到设置中,效果很好。
【问题讨论】:
-
我相对确定事件是同步触发的,而且
model.get('settingsJSON').apps = true将不会触发任何事件。但是我已经在这个线程中错了两次,所以我知道什么。这是一个演示:jsfiddle.net/T7jKg。你能分叉它并显示你的代码中发生了什么吗? -
@fencliff 我认为一定是发生了改变被其他东西触发了,可能是 .save()。不完全确定。稍后我可能会重新访问它以尝试让它按我想要的方式工作,但现在我的修复将起作用
标签: javascript events backbone.js