m是Backbone.Model的子类。我希望m.url()返回' / api / media / sources / 1'但我得到了:
> m.id
1
> m.collection.url
"/api/media/sources"
> m.urlRoot
undefined
> m.url()
"/api/media/sources"
发生了什么?
答案 0 :(得分:1)
如果您希望将id
附加到网址,则应设置urlRoot
,而不是url
。
看看default implementation for Backbone.Model.prototype.url
,它会有意义:
url: function() {
var base =
_.result(this, 'urlRoot') ||
_.result(this.collection, 'url') ||
urlError();
if (this.isNew()) return base;
return base.replace(/([^\/])$/, '$1/') + encodeURIComponent(this.id);
},
后来的评论显示(发布此答案后)问题与如何设置属性有关。
通常,您应该始终使用model.set("id", idValue)
进行所有属性更改,尤其是ID属性。 (如果您已将idAttribute
设置为模型原型上的其他内容,请将该名称用作第一个参数而不是"id"
。)
更一般地说,直接访问model.attributes
使用model.set()
和model.get()
是一个坏主意。 model.id
属性是一种方便,您基本上应该将其视为只读; Backbone将在涉及id属性的每个set()
调用中适当地修改它。 - Platinum Azure 18小时前