【问题标题】:Response/request object for .save() in backbone.js.save() 在backbone.js 中的响应/请求对象
【发布时间】:2019-12-29 01:59:51
【问题描述】:

在下面的函数中,你可以在 .save() 部分看到没有响应对象,我想知道如何声明响应对象以获取返回值。

        $.when(
            _this.formWebsitePart.save({
                success: function () {
                    console.log("website saved")
                    _this.formWebsitePart.isSaved = true;
                }
            }),
            _this.formAddressPart.save({
                success: function () {
                    console.log("address saved")
                }
            })
        ).then(function () {
                _this.signupSuccess();
            }
        )

【问题讨论】:

  • @Bergi 只是我需要从 .save 函数中获得响应。
  • 文档说 .save() 返回一个 jqXHR 对象。这还不够(作为一个 Promise 实例)吗?
  • 没错,但在上面的代码中似乎不起作用,我认为那是因为 .save() 没有返回任何东西对吗?
  • 什么不起作用?怎么了?你得到什么错误?
  • 您能告诉我如何在 .when 承诺对象中使用该返回值吗?

标签: javascript ajax backbone.js promise jquery-deferred


【解决方案1】:

如果您的 .save() 真正返回一个 jqXHR 对象,那么您可能想要这样的东西:

_this.saveFormParts = function() {
    if(!_this.formWebsitePart.jqXHR) {
        _this.formWebsitePart.jqXHR = _this.formWebsitePart.save().then(function(response) {
            console.log("website saved");
            return response || null;
        });
    }
    if(!_this.formAddressPart.jqXHR) {
        _this.formAddressPart.jqXHR = _this.formAddressPart.save().then(function(response) {
            console.log("address saved");
            return response || null;
        });
    }
    return $.when(
        _this.formWebsitePart.jqXHR,
        _this.formAddressPart.jqXHR
    );
}

并且,在适当的地方:

_this.saveFormParts().then(_this.signupSuccess); // or similar

如果您的 .save() 没有返回 jqXHR 对象,那么您需要执行以下操作之一:

  • 编写.save() 的承诺版本(首选)
  • 写一个承诺版本的.saveFormParts()

对于常规回调接口的承诺 - try this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2017-04-09
    相关资源
    最近更新 更多