1

在使用 Backbone 同步时,我很难弄清楚如何让回调正常工作。我正在查看我的返回数据包,响应代码是 200,这没有错误,但调用了 alert("fail") 语句。我正在请求来自 java servlet 的响应。有什么想法吗?谢谢

Backbone.sync("read", this.model, {
  url : "some url",
    success: function(model, response) {
      alert(response);
    },
    error: function(model, response) {
      alert("fail");
    }
});
4

2 回答 2

2

我不明白你在做什么...

使用此方法而不是同步:

model.fetch();
model.save();
model.destroy();

他们会调用同步,并且他们工作得很好。

我认为没有必要覆盖原始同步,它已经足够好了。我为示例应用程序创建了一个模拟同步,它是这样工作的:

var User = Backbone.Model.extend({
    notAllowedEmailHost: "gmail.com",
    sync: function (method, model, options) {
        if (method == "read" || method == "delete")
            throw new Error("Example is not prepared for these methods.");
        var email = model.get("email");
        var status = 201;
        if (email.indexOf(this.notAllowedEmailHost) != -1)
            status = 400;
        else if (method == "update")
            status = 500;
        options.xhr = {
            status: status
        };
        if (status >= 400)
            options.error(options.xhr);
        else
            options.success({
                id: 1
            });
    }
});

上面的方法围绕你的回调创建包装函数,并且同步调用这些包装函数和结果。所以同步回调不是你通过调用获取、保存或销毁函数给出的回调......

于 2013-05-20T00:27:55.363 回答
1

确保您的 servlet 返回一个 JSON 对象,即使它是空的。这解决了我的问题。

于 2014-08-01T11:12:19.660 回答