2011-08-08 3 views
26

수행 할 작업의 유형에 따라 다양한 URL을 치기 위해 백본 모델 중 하나가 필요합니다. 적절한 URL을 지정할 수 있도록 URL 함수 내에서 작업을 어떻게 결정합니까?백본 앱에 다양한 URL을 지정하려면 어떻게해야합니까?

삭제 :/myapipath/나타내고 itemtype/ID/
가 POST :/myapipath/특수 경로/
GET을 : 예를 들어/myapipath/특수 경로/코드 = ABC

내가 아는 방법 POST와 다른 모든 것의 차이점을 알려주십시오. this.isNew()

그러나 사용자 정의 model.url 함수에서 DELETE와 GET의 차이점을 어떻게 알 수 있습니까?

서버 측 API를 변경하지 마십시오. 그건 나에게 달린 것이 아니다.

감사합니다.

답변

55

개념적으로 Backbone 모델의 URL은 리소스의 기본 GET URL입니다. 일부 작업에 다른 URL을 사용하려면 모델의 동기화 기능을 재정의하십시오. 다행히 Backbone makes it easy to override :

window.MyModel = Backbone.Model.extend({ 
    // ... other stuff ... 

    url: '/myapipath/special-path/?code=ABC', 

    methodUrl: { 
    'create': '/myapipath/special-path/', 
    'delete': '/myapipath/itemtype/id/' 
    }, 

    sync: function(method, model, options) { 
    if (model.methodUrl && model.methodUrl[method.toLowerCase()]) { 
     options = options || {}; 
     options.url = model.methodUrl[method.toLowerCase()]; 
    } 
    Backbone.sync(method, model, options); 
    } 
} 

편집 : 나는 백본 소스에서 다른 모양을 가지고 가고 그렇지 않은 options.params params 객체를 파라미터를 구축 할 수있는 전체 options 인수 합병 것을 발견하고 그에 따라 내 예를 업데이트했습니다.

+0

멋진 답변입니다. 나는 options.params가 맞다고 생각하지 않는다. 그러나 Backbone.sync는 전달 된 'options'을 확장하므로 params.url을 찾을 때 실제로 옵션이된다. – satchmorun

+0

고마워! 나는 당신이 당신의 코멘트를 게시했을 때 나의 대답을 고치고 있었다. :) –

+0

고마워요 - 그 사소한 수정과 함께 지금까지 작동하는 것, 가장 주목할 만하게, methodUrl '게시물'대신 '작성'이 있어야합니다. 나는 나의 목적을 위해 몇 가지 다른 변화를 만들었지 만, 여기서 주목할 가치가있는 것은 없다. 좋은 대답. – gcdev

관련 문제