在集合中创建新实例后,不要在端点(骨干)上执行GET请求

时间:2012-04-13 07:12:44

标签: javascript backbone.js

将模型实例添加到集合后,我会发出POST请求来添加它。然后完成GET请求以从服务器获取模型。有没有办法不通过GET请求,只有POST请求?此外,是否有可能获得成功和错误回调函数来响应POST请求的成功和失败?

我想这样做是因为该集合有一个URL来解析返回的JSON数据,因此GET请求不起作用,但POST请求确实有效。我不想在无效的端点上执行GET请求。

2 个答案:

答案 0 :(得分:2)

GET请求是不必要的。在POST处理程序的服务器上,您应该将JSON结果返回给表示模型的客户端。当生成诸如id的字段时,这尤其有用。然后在成功回调的客户端上,您可以获取POST返回的模型。

在以下示例中,如果成功,则会向集合添加新模型。我还包括错误回调,如果客户端验证失败或POST失败,它将触发:

var isNew = this.model.isNew();
this.model.save({}, {
    success: function(model, response) {
        if (isNew && this.collection) {
            this.collection.add(model);
        }   
    },
    error: function(model, response) {
        var errorMsg;
        // Response may be string (if failed client side validation or an AJAX response (if failed server side)
        if (_.isString(response))
            errorMsg = response;
        else
            errorMsg = response.responseText;
    }
});

答案 1 :(得分:1)

您遵循的流程确实是不必要的。您应该在集合上使用create来直接添加模型,并在同一时间调用sync(在这种情况下为POST)。

例如:

collection.create({foo: 'bar'});collection.create(unsaved_model);

如果不成功,调用create的结果将返回(已保存)模型或false。此外,可以通过执行

等待模型保存before添加到集合中
collection.create({foo: 'bar'}, {wait: true});

documentation是你的朋友。