9

我一直在尝试backbone.js,当我创建一个新的模型对象然后调用model.save() 时遇到了困难。我期待backbone.js默认行为使用数据库中的id更新模型对象,但事实并非如此。这不应该发生吗?我已经验证我收到了一个带有 json 格式属性的帖子。我的服务器将 json 保存到一个表中,然后将带有新 id 字段的 json 返回到backbone.js。这个对吗?我的服务器应该返回整个新对象还是只返回 id 或什么?

//contents of the POST from backbone.js
  { "text":"this is a test" }

//reply from my server
  { id:"15", text:"this is a test"  }

我的示例代码如下

var SQLRow = Backbone.Model.extend({
 table:"",
 urlRoot:'db',
 url:function () {
    return "/" + this.urlRoot + "?table=" + this.table + 
                 "&id=" + this.attributes.id;
   }
});

var Xtra = SQLRow.extend ({
   table:'Xtra'
});

var row = new Xtra({
  text: "this is a test" 
});

alert(row.url());
row.save()
alert("row:" + row.get("id"));
4

4 回答 4

6

很难从你的帖子中看出。两个想法:

1)来自服务器的响应不成功你的保存调用返回什么?

2)您的“id”属性被命名为 ID 以外的名称。要考虑不同的名称,请将以下内容添加到您的模型中:

   idAttribute  : "MyModelsID",

编辑

您可能会遇到时间问题,即在 ID 返回之前触发警报。而不是你的最后两行试试这个:

row.save( null, 
              { 
                 success : function(model, response) { alert(model.get('id'); } 
               }
         );

选择

正如@mu_is_too_short 提到的,另一种方法是即使在模型上也能监听变化并响应事件。(我只是试图让答案尽可能接近您的代码)。但是像下面的伪代码应该让你开始......

var myView = Backbone.View.extend({
           ....
           initialize : function () {
                this.collection.bind('change',  this.SOME_LISTENING_FUNC    );

             }
  });

或者,如果你在一个收集/无视图的世界中,这样的东西会创建一个监听器......

row.on('change',  function() {  /* do stuff */ }, this);               
于 2012-05-08T18:15:21.057 回答
1

该答案基于上述答案中Cjolly 的一条评论。

对于Backbone.Model.save([attributes],[options])成功地将模型与来自服务器的新生成模型的 id 进行关联至关重要,服务器id在 JSON 字符串中返回模型,如下所示{ "id" : <the id> }。(注意它是"id"而不是id)。

本质上,主干正确地期望一个 JSON 字符串,与在没有引用键的 Javascript 中如何定义对象相反,JSON 需要引用对象键(请参阅JSON 规范 - 键是否必须用引号括起来?

由于根据 Cjolly 的评论,这是基本问题,我想在第二个答案中强调这个解决方案。部分原因是我遇到了同样的问题,只有通过阅读评论,我才能获得洞察力。

于 2013-11-10T21:42:42.973 回答
0

我遇到了同样的问题,我发现我validate保存的模型的功能实际上使从后端返回的模型无效。这就是为什么我的字段没有正确更新的原因。

于 2014-05-21T10:17:45.617 回答
0

也许它有点过时了,但今天我有同样的失踪 id。事实证明,服务器只是发送一个包含新 id 的重定向的标头“位置”,但不返回持久对象。将对象添加到响应中是解决方案。看起来,不返回对象是 Roo(Spring) 生成的 Json-Controllers 的标准行为。

于 2015-02-03T12:13:05.530 回答