Backbone에서 단일 모델을 어떻게 가져 옵니까?
나는이 Clock
백본에서 모델 :
var Clock = Backbone.Model.extend({});
에서 최신 정보가있는 인스턴스를 가져 오려고합니다 /clocks/123
. 내가 시도한 몇 가지 :
"클래스"수준 메서드
Clock.fetch(123)
// TypeError: Object function (){ ... } has no method 'fetch'
인스턴스를 만든 다음 호출 fetch
합니다.
c = new Clock({id: 123})
c.fetch()
// Error: A 'url' property or function must be specified
컬렉션
AllClocks
컬렉션 리소스를 만들려고 시도 했습니다 (페이지에서 그런 것을 사용하지 않더라도).
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
allClocks.fetch(123);
// returns everything from /clocks/
API 지원 시계 하나만 얻으려면 어떻게해야 합니까?
두 번째 접근 방식은 제가 사용한 접근 방식입니다. 시계 모델에 다음을 추가해보십시오.
url : function() {
var base = 'clocks';
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
},
이 접근 방식은 http://www.mydomain.com/#clocks/123 과 같이 URL에 해시 뱅이있는 컨트롤러를 구현했다고 가정 하지만 아직 실행하지 않았더라도 작동합니다.
모델에서 urlRoot 를 지정해보십시오 .
문서에서 :
var Book = Backbone.Model.extend({urlRoot : '/books'});
var solaris = new Book({id: "1083-lem-solaris"});
solaris.fetch();
개인적으로 Model # url 메서드 문서를 따르는 것이 좋습니다.
model = new Model(id: 1)
view = new View(model: model)
collection = new Collection([model])
model.fetch()
컬렉션에 컬렉션 URL을 추가해야합니다.
url: "/models"
뷰의 초기화 기능에서 다음을 수행하십시오.
this.model.bind("change", this.render)
이런 식으로 백본은 다음 URL을 사용하여 ajax 요청을 수행합니다.
"/models/1"
Collection # url 또는 Model # urlRoot를 수정하지 않고 모델이 업데이트되고 뷰가 렌더링됩니다.
참고 :이 예제는 커피 스크립트로 나왔지만 쉽게 var 문을 추가하여 js로 변환 할 수 있습니다.
var Person = Backbone.Model.extend({urlRoot : '/person/details'});
var myName = new Person({id: "12345"});
myName.fetch();
결과적으로 Ajax 요청을
URL http://[domainName]/person/details/id
그리고 당신은 다시 JSON 응답을 받았습니다.
Enjoiiii !!!
... 모델 urlRoot에 후행 슬래시를 원하지 않는 경우 다음을 수행하십시오.
url : function() {
return this.urlRoot + this.id;
},
컬렉션을 통해 개체에 액세스하고 항상 컬렉션에 유지해야합니다. 방법은 다음과 같습니다.
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
my_clock = allClocks.add({id: 123});
my_clock.fetch()
I want to use RESTful url,but I couldn't understand why 'postId' can't be added to base url.
var PostModel = Backbone.Model.extend({
urlRoot: 'getBlogPost',
defaults: {
postTitle: "defaultTitle",
postTime: "1970-01-01",
postContent: "defaultContent",
postAuthor: "anonymous"
}
});
var post = new PostModel({
postId: 1
});
alert(post.url());
Then I know only after I set 'idAttribute' as 'postId' in Model can I get the right url. like this:
var PostModel = Backbone.Model.extend({
idAttribute: 'postId',
urlRoot: 'getBlogPost',
defaults: {
postTitle: "defaultTitle",
postTime: "1970-01-01",
postContent: "defaultContent",
postAuthor: "anonymous"
}
});
참고URL : https://stackoverflow.com/questions/5097107/how-do-i-fetch-a-single-model-in-backbone
'IT박스' 카테고리의 다른 글
공백 문자가있는 입력에서 문자열을 읽습니까? (0) | 2020.08.30 |
---|---|
PHP를 사용하여 파일을 제공하는 가장 빠른 방법 (0) | 2020.08.30 |
동적 프로그래밍을 이해하려는 사람을위한 간단한 예 (0) | 2020.08.29 |
ASP.NET MVC에서 동적 로그인 URL로 리디렉션하는 방법 (0) | 2020.08.29 |
Java EE는 실제로 무엇입니까? (0) | 2020.08.29 |