Backbone:等待多次更新

时间:2014-03-05 11:04:47

标签: backbone.js

我正在Backbone.js中编写一个简单的应用程序,并遇到了令人沮丧的情况,即在更改每个模型属性之前,我的函数绑定到更改事件。

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

这是一些伪代码:

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'函数时,我有新的开始日期和旧的结束日期。

任何线索?

编辑:

增加的复杂性是有时只会更改日期日期,例如用户选择与之前相同的结束日期的范围。好像我需要在触发功能之前等待一段时间来检查是否有变化。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

您注册“change:startDate change:endDate”这一事实并不意味着只有在两者都发生变化时才会触发事件。它们是separeted事件,因此当“change:startDate”发生时,您的prepareData函数被调用,并且当“change:endDate”发生时也是如此。 这就是为什么第一次调用prepareData函数时,endData具有旧值。