m은 Backbone.Model의 하위 클래스입니다. 나는 m.url이()/API/미디어/소스/1 '복귀 기대 대신 내가 얻을 :단일 모델을 백본으로 가져 오는 이유는 무엇입니까?
> m.id
1
> m.collection.url
"/api/media/sources"
> m.urlRoot
undefined
> m.url()
"/api/media/sources"
을 무슨 일이야?
m은 Backbone.Model의 하위 클래스입니다. 나는 m.url이()/API/미디어/소스/1 '복귀 기대 대신 내가 얻을 :단일 모델을 백본으로 가져 오는 이유는 무엇입니까?
> m.id
1
> m.collection.url
"/api/media/sources"
> m.urlRoot
undefined
> m.url()
"/api/media/sources"
을 무슨 일이야?
id
을 URL에 추가하려면 url
이 아니라 urlRoot
으로 설정해야합니다.
는 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.set()
및 model.get()
대신 model.attributes
directly- 사용에 액세스하는 나쁜 생각입니다. model.id
속성은 기본적으로 읽기 전용으로 취급해야하는 편의입니다. 백본은 id 속성과 관련된 모든 set()
호출에서 적절하게 수정합니다. - Platinum Azure 18 시간 전
아, collection.url은 urlRoot와 마찬가지로 작동해야하지만이 코드는 실제 문제를 보여줍니다. isNew()가 true를 반환하면 id가 추가되지 않습니다. m.id가 설정되었지만 m.attributes.id가 아니기 때문에 둘 다 설정해야합니다. – elplatt
아, 네. 일반적으로 모든 속성 변경에 항상'model.set ("id", idValue)'를 사용해야하며, 특히 ID 속성을 사용해야합니다. ('idAttribute'를 모델 프로토 타입의 다른 것으로 설정했다면, 그 이름을''id "'대신에 첫 번째 인자로 사용하십시오.) –
일반적으로'model.attributes'에 직접 접근하는 것은 좋지 않습니다. 'model.set()'과'model.get()'을 대신 사용하십시오. 'model.id' 속성은 기본적으로 읽기 전용으로 취급해야하는 편의입니다. 백본은 id 속성을 포함하는 모든'set()'호출에서 적절하게 수정합니다. –
모델의'idAttribute'와'isNew()'를 호출 한 결과를 보여줄 수 있습니까? –