Backbone.js 主干:等待多个更新
我在Backbone.js中编写了一个简单的应用程序,遇到了一个令人沮丧的情况,即绑定到更改事件的函数在每个模型属性更改之前被触发 总之,我的组件绑定到一个日期选择器,并接受开始日期和结束日期。我想等到开始日期和结束日期都设置好了,但是使用change事件会在两者都设置好之前触发 下面是一些伪代码:Backbone.js 主干:等待多个更新,backbone.js,Backbone.js,我在Backbone.js中编写了一个简单的应用程序,遇到了一个令人沮丧的情况,即绑定到更改事件的函数在每个模型属性更改之前被触发 总之,我的组件绑定到一个日期选择器,并接受开始日期和结束日期。我想等到开始日期和结束日期都设置好了,但是使用change事件会在两者都设置好之前触发 下面是一些伪代码: define(["jquery", "underscore"], function () { var model = Backbone.Model.extend({ initialize:
define(["jquery", "underscore"], function () {
var model = Backbone.Model.extend({
initialize: function (options) {
this._super();
//Make the items null
this.set("startDate", null);
this.set("endDate", null);
//Listen for changes to data
this.on("change:startDate change:endDate", this.prepareData, this);
},
prepareData: function() {
var startDate= this.get("startDate");
if (!startDate)
return;
var endDate= this.get("endDate");
if (!endDate)
return;
//DO MY STUFF
}
});
这样做的结果是,第一次启动“prepareData”函数时,我有了新的开始日期和旧的结束日期
有什么线索吗
编辑:
增加的复杂性是,有时只更改日期,例如,用户选择的范围与以前的结束日期相同。在触发该功能之前,我似乎需要等待一段时间来检查是否已更改。您可以将旧日期存储在您的模型中(this.\u startDate&this.\u endDate)以检查它们是否已更改:
prepareData: function() {
var count = 0;
var startDate= this.get("startDate");
if (startDate == this._startDate)
count++;
var endDate= this.get("endDate");
if (endDate == this._endDate)
count++;
if (count == 0) {
return;
} else if (count == 1) {
// here set your timeout
}
this._startDate = startDate;
this._endDate = endDate;
//DO MY STUFF
}
您正在注册“change:startDate change:endDate”并不意味着只有当它们都已更改时才会触发事件。它们是分离的事件,因此当“change:startDate”发生时,将调用prepareData函数,并且当“change:endDate”发生时也会调用。
这就是为什么第一次调用prepareData函数时endData具有旧值的原因。谢谢,这很有用,但不适用于结束日期相同的情况(例如用户只是更改开始日期)。那样的话,什么也跑不了。我怎么能等一段时间呢?谢谢,但这正是我的问题。我需要能够等待,看看是两个日期都在更新,还是只有一个。