首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在创建新的模型时检索模型ID?

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

Stack Overflow用户
提问于 2011-08-25 12:45:11
回答 3查看 6.5K关注 0票数 12

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

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

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

UPDATE看起来我的组织使用的是一个旧的Backbone.js,其中模型的解析方法不提供对XHR对象的引用,否则我可以捕获ID并在那里进行赋值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 13:45:20

服务器应该返回一个包含模型的id的JSON对象,以及它想要更新的任何其他属性。如果是这样的话,主干将自动获取id。

如果这不是一个选项,您应该重写Backbone.sync,因为您的API (它在location而不是response中通信新id )不符合主干网在开箱即用的支持。

如果服务器已经这样做了,并且您只想获得id,这取决于谁需要知道。如果是调用model.save()的代码,那么它可以传入一个成功的回调:

代码语言:javascript
复制
model.save({}, {
    success: function(){
        // do something with model.id
    }
});

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

代码语言:javascript
复制
var MyModel = Backbone.Model.extend({
    initialize: function(){
        this.bind("change:id", function(){
            // …
        });
    }
});
票数 11
EN

Stack Overflow用户

发布于 2011-08-25 13:31:42

我通过重载backbone.sync中的成功参数来解决这个问题。

代码语言:javascript
复制
// Return XHR on success
params.success = function(response, text, XHR) {
  if(_.isFunction(model.xhrParse)) { model.xhrParse.call(model, response, XHR); }
  success.call(model, response);
}

通过在我的基本模型“xhrParse”中添加一个新方法:

代码语言:javascript
复制
xhrParse: function(resp, XHR) {
   var locationHeader = XHR.getResponseHeader('Location');
   if(locationHeader && !this.id) {
     var xplode = locationHeader.split("/");
     this.id = xplode[xplode.length - 1];
   }
   return resp;
 }
票数 1
EN

Stack Overflow用户

发布于 2011-08-25 12:50:23

http://documentcloud.github.com/backbone/#Model-id

model.id属性?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7190586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档