我有用户模型(Backbone.js),我想更新其设置属性,然后将其保存到服务器。设置为JSON格式,我设置的方式是设置是字符串版本,settingsJSON是对象版本。我将函数绑定到每个函数的更改事件,以便在更改时更新另一个函数。在保存模型之前等待更改处理程序完成
我遇到的问题是保存方法在更改的处理程序运行完成之前正在运行。有什么办法可以确保该模型的所有事件处理程序都是完整的或类似的东西?
如何我打电话吧:
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
现在我刚才提出,以便我stringily的JSON和我之前它直接保存到设置保存并且工作正常。
我*相对*确保事件同步解雇,也是'model.get(“settingsJSON”)。应用= TRUE;将**不* *触发任何事件。但我已经在这个线程中出错了两次,所以我知道什么。这里有一个演示:http://jsfiddle.net/T7jKg/。你可以分叉它,并显示你的代码中发生了什么? – jevakallio
@fencliff我认为必须发生的事情是,这个变化正在被别的东西激发,可能是.save()。不完全确定。我稍后可能会重新讨论这个问题,试图让它工作得如何我想要的,但现在我的修复会起作用 –