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
Events 主干事件处理程序中的回调_Events_Backbone.js_Callback_Marionette - Fatal编程技术网

Events 主干事件处理程序中的回调

Events 主干事件处理程序中的回调,events,backbone.js,callback,marionette,Events,Backbone.js,Callback,Marionette,如何获取结果的值(粗体) 我请求一个处理者 Handler正在调用一个函数,而这个函数又向服务器发出ajax调用 我希望能够完成ajax调用并相应地返回结果 在下面的代码中,无论发生什么错误或成功,“result”总是false,因为App.reqres是在ajax调用完成之前返回的 如何重新构造代码 鉴于 resetPassword: function(event) { var ***result*** = App.reqres.request('reset_passw

如何获取结果的值(粗体)

我请求一个处理者

Handler正在调用一个函数,而这个函数又向服务器发出ajax调用

我希望能够完成ajax调用并相应地返回结果

在下面的代码中,无论发生什么错误或成功,“result”总是false,因为App.reqres是在ajax调用完成之前返回的

如何重新构造代码

鉴于

    resetPassword: function(event) {
        var ***result*** = App.reqres.request('reset_password', this.$email.val());
        if(!result){
            // If email is not registered
        }else{
           // send a link to reset password
        }
    },
处理者

   var API = {
        reset_password: function(email, callback) {
            var promise = // some ajax call to the server

            var result = false;

            $.when(promise).then(function(data, textStatus, jqXHR) {
                result = true;
            }).fail(function() {
                result = false;
            }).done(function(){
                return result;
            });
        }
    };

    App.reqres.setHandler("reset_password", function(email) {
        return API.reset_password(email);
    });
一个解决方案:(有没有更好的方法??)

试一试

        return $.when(promise).then(function(data, textStatus, jqXHR) {
            return true;
        }).fail(function() {
            return false;
        });

您只需返回承诺,然后在
resetPassword
方法中使用回调,如下所示:

resetPassword: function(event) {
    var message = this.$message;
    App.reqres.request('reset_password', this.$email.val())
      .then(function() {
        // send link to reset password
        message.html('A reset code and reset password link has been sent to this email.')
        message.removeClass('error');
        message.addClass('success');
      })
      .fail(function() {
        // If email is not registered
        message.html('Email is not registered.')
        message.removeClass('success');
        message.addClass('error');
      });
},
然后您的请求处理程序将如下所示:

var API = {
    reset_password: function(email) {
        var promise = // some ajax call to the server

        return $.when(promise);
    }
};

App.reqres.setHandler("reset_password", function(email) {
    return API.reset_password(email);
});

这是有意义的,因为您正在创建异步。将承诺传递回关心它的方法会使处理变得更加清晰。

这样的结果是“未定义的”。因为所有调用都是在ajax调用完成之前返回的。谢谢你关于木偶的书,顺便说一句:)哦,你说得对。。。似乎您需要按照您的建议使用回调,或者返回一个承诺并在调用它的地方处理返回值。请参阅(忽略
setTimeout
),很高兴您喜欢这些书!
var API = {
    reset_password: function(email) {
        var promise = // some ajax call to the server

        return $.when(promise);
    }
};

App.reqres.setHandler("reset_password", function(email) {
    return API.reset_password(email);
});