我一直在尝试使用backbone.js,当我创建一个新的模型对象然后调用model.save()时,我一直受到阻碍.我期望使用来自数据库的id来更新模型对象的backbone.js默认行为,但事实并非如此.这不应该发生吗?我已经验证我收到了一个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" }
Run Code Online (Sandbox Code Playgroud)
我的示例代码如下
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"));
Run Code Online (Sandbox Code Playgroud)
很难从你的帖子中得知.两个想法:
1)来自服务器的响应不成功您的保存呼叫返回什么?
2)您的"id"属性被命名为ID之外的其他属性.要考虑不同的名称,请在模型中添加以下内容:
idAttribute : "MyModelsID",
Run Code Online (Sandbox Code Playgroud)
编辑
您可能面临计时问题,警报在ID返回之前触发.而不是你的最后两行试试这个:
row.save( null,
{
success : function(model, response) { alert(model.get('id'); }
}
);
Run Code Online (Sandbox Code Playgroud)
备选
正如@mu_is_too_short所提到的,另一种方法是甚至在模型上监听变化并响应事件.(我只是想尽可能地保持答案尽可能接近你的代码).但是像下面的伪代码应该让你开始......
var myView = Backbone.View.extend({
....
initialize : function () {
this.collection.bind('change', this.SOME_LISTENING_FUNC );
}
});
Run Code Online (Sandbox Code Playgroud)
或者,如果你在一个收藏/无视图的世界,像这样的东西创造了一个听众......
row.on('change', function() { /* do stuff */ }, this);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8188 次 |
| 最近记录: |