IT박스

Backbone에서 단일 모델을 어떻게 가져 옵니까?

itboxs 2020. 8. 30. 07:51
반응형

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

반응형