[英]Fetching a single model in backbone, why doesn't this work?
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"
這是怎么回事?
當您希望將id
附加到URL時,應設置urlRoot
而不是url
。
看一下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);
},
后來的評論顯示(在發布此答案之后)該問題與如何設置屬性有關。
通常,對於所有屬性更改,尤其是ID屬性,都應始終使用model.set("id", idValue)
。 (如果在模型原型idAttribute
設置為其他名稱,請使用該名稱作為第一個參數,而不是"id"
。)
更普遍地說,直接訪問model.attributes
是一個壞主意-改為使用model.set()
和model.get()
。 model.id
屬性是一種便利,您基本上應該將其視為只讀; 骨干網將在涉及id屬性的每個set()
調用中對其進行適當的修改。 –白金Azure 18小時前
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.