如何在创建新模型时检索模型ID?

Sky*_*son 12 javascript jquery backbone.js

使用Backbone.JS,我能够成功创建新模型并将其保存到服务器.他们成功地进行了ajax调用,并且订阅的UI元素进行了适当的更新.我遇到的问题是我不知道新创建的对象的ID.

我可以在创建调用的响应头中看到,服务器返回的位置标题如下: Location https://localhost/rest/beta/mobile/footer/OTo3Njow最后一个参数是新创建的ID.

如何在不覆盖backbone.sync的情况下获取此ID?如果我必须覆盖backbone.sync,最干净的方法是什么?

更新 看起来我的组织正在使用较旧的Backbone.js,其中模型的解析方法不提供对XHR对象的引用,否则我可以捕获ID并在那里进行分配.

s4y*_*s4y 11

服务器应该发回一个包含id模型的JSON对象,以及它想要更新的任何其他属性.如果是这样,Backbone会自动获取ID.

如果这不是一个选项,你应该覆盖Backbone.sync,因为那时你的API(它在位置头而不是响应体中传递新的id)不符合Backbone支持的开箱即用.


如果服务器已经执行此操作,并且您只想获取ID,则取决于谁需要知道.如果它是代码调用model.save(),那么它可以传递成功回调:

model.save({}, {
    success: function(){
        // do something with model.id
    }
});
Run Code Online (Sandbox Code Playgroud)

如果模型本身需要在获取id时得到通知,则可以使用初始化程序:

var MyModel = Backbone.Model.extend({
    initialize: function(){
        this.bind("change:id", function(){
            // …
        });
    }
});
Run Code Online (Sandbox Code Playgroud)