2015-02-07 3 views
0

인터넷에있는 많은 리소스를 기반으로 POST /api/v1/users/subscribe 요청을 보내는 사용자 지정 모델 작업을 만들려고합니다. 내 코드는 다음과 같습니다 : 그것을 사용하는 경우사용자 지정 Backbone.Model 작업이 작동하지 않습니다.

@UserModel = Backbone.Model.extend 
    urlRoot: '/api/v1/users' 

    subscribe: (opts) -> 
    url = "#{@urlRoot}/subscribe" 
    options = 
     url: @url 
     method: 'POST' 
    _.extend @options, opts 

    return (@sync or Backbone.sync).call this, null, this, @options 

그러나, 다음과 같이

user = new UserModel 
user.subscribe() 

그것은의 GET /api/v1/users 요청합니다. 내 코드가 잘못된 점을 설명해 주시겠습니까? 사용자 정의 메서드에 대한 거의 모든 예제는 다음과 같습니다. https://gist.github.com/sap1ens/4692429 및 내 코드는 정확한 포트입니다. 사전에

감사 backbonejs.org에서

+0

코드 체크. '_.options, opts'를 그 순서대로'_.extend 하시겠습니까? 일반적으로 기본 옵션 (경우에 따라'opt')은 무시됩니다. 그래서 당신은'opts = opts || {}''_.extend opts, @ options'. – seebiscuit

+0

제공된 요점 코드와 함께 js 파일을 사용하는 것이 효과적이기 때문에 coffe -> js 컴파일 문제가되었습니다. 그러나, 나는 아직도 그것이 커피에서 작동하지 않는다는 것을 전혀 모른다. – mbajur

답변

2

: 옵션 - 성공 및 오류 콜백 및

Backbone.sync 방법의 옵션 매개 변수가 받아 다른 모든 jQuery를 요청 옵션 jquery 요청 옵션. 요청 유형을 지정하려면 jquery 옵션이 'type'(jQuery.ajax)이어야합니다. 다음 코드는 작동합니다.

var UserModel = Backbone.Model.extend({ 
    urlRoot: '/api/v1/users', 
    subscribe: function (opts) { 
     var url = "this.urlRoot/subscribe" 
     var options = { 
      url: url, 
      type: 'POST' 
     }; 
     _.extend(options, opts); 

     return Backbone.sync.call(this, null, this, options); 
    } 
}); 

user = new UserModel(); 
user.subscribe(); 

P.S. : 나는 커피 스크립트가 좋지 않으므로 대충 js로 번역됩니다.

+0

괜찮 았던 것 같아요. 커피 때문에 생긴 일종의 결함 인 것 같습니다.> js 디코딩은 코드가 잘 작동하는 반면에,'method'가'type'으로 변경 되더라도 ** GET ** 요청은 완전히 잘못되었습니다 url. 귀하의 답변을 받아 들일 수 없습니다 그것은 내 문제에 대한 직접적인 해결책이 아니지만 그 문제를 지적 해 주셔서 대단히 감사합니다! Upvoting :) – mbajur

1

url: @url, _.extend @options, opts 및 return 문에주의하십시오. Coffescript는 @this으로 컴파일합니다.

@UserModel = Backbone.Model.extend 
    urlRoot: '/api/v1/users' 

    subscribe: (opts) -> 
    url = "#{@urlRoot}/subscribe" 
    options = 
     url: url 
     type: 'POST' 
    _.extend options, opts 

    return (@sync or Backbone.sync).call @, null, @, options