Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干:等待多个更新_Backbone.js - Fatal编程技术网

Backbone.js 主干:等待多个更新

Backbone.js 主干:等待多个更新,backbone.js,Backbone.js,我在Backbone.js中编写了一个简单的应用程序,遇到了一个令人沮丧的情况,即绑定到更改事件的函数在每个模型属性更改之前被触发 总之,我的组件绑定到一个日期选择器,并接受开始日期和结束日期。我想等到开始日期和结束日期都设置好了,但是使用change事件会在两者都设置好之前触发 下面是一些伪代码: define(["jquery", "underscore"], function () { var model = Backbone.Model.extend({ initialize:

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

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

下面是一些伪代码:

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具有旧值的原因。

谢谢,这很有用,但不适用于结束日期相同的情况(例如用户只是更改开始日期)。那样的话,什么也跑不了。我怎么能等一段时间呢?谢谢,但这正是我的问题。我需要能够等待,看看是两个日期都在更新,还是只有一个。