2014-03-05 53 views
0

我在Backbone.js中编写了一个简单的应用程序,并且遇到了一个令人沮丧的情况,那就是在更改每个模型属性之前,绑定到更改事件的函数正在被触发。Backbone:等待多个更新

总之,我的组件绑定到日期选择器,并且接受开始日期和结束日期。我想等到设置开始日期和结束日期,但是在设置之前使用更改事件触发。

下面是一些伪代码:

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”功能被激发,我有新的开始日期和旧的结束日期。

任何线索?

编辑:

增加的复杂的是,有时仅日期日期将被改变,例如在用户选择的是在相同的结束日期如先前土地一个范围。似乎我需要等待一段时间才能检查更改,然后再触发该功能。

回答

1

您可以将模型中的旧日期(this._startDate & this._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 
} 
+0

谢谢,这很有用,但不会说明结束日期相同的情况(比如说用户只是改变了开始日期)。在那种情况下,什么都不会发生我该如何等待一段时间? – PizzaTheHut

0

事实上您注册“的变化:变化的startDate:结束日期”没有按这并不意味着只有两个人都改变了,这个事件才会被解雇。它们是分离的事件,所以当发生“change:startDate”时,您的prepareData函数会被调用,并且也会在发生“change:endDate”时发生。 这就是为什么第一次调用prepareData函数时endData具有旧值。

+0

谢谢,但那正是我的问题。我需要能够等待查看两个日期是否正在更新,或者只有一个。 – PizzaTheHut