2014-02-05 2 views
0

저는 Rails에서 백본을 사용 중이며 새 모델을 서버에 저장하려고합니다. 그러나 모델에 .save()을 호출해도 아무 것도하지 않는 것 같습니다. Chrome의 '네트워크'탭을 보면 어떤 요청도 표시되지 않습니다. 여기에 내 코드입니다 :백본 모델 save() 메소드가 아무 것도하지 않습니다.

모델

class MyApp.Models.Chain extends Backbone.Model 
    defaults: 
     steps: [] 
     id: null 

    urlRoot: '/chains' 

    validate: (attrs) -> 
     if $.trim(attrs.steps[@step_number - 1]) == '' 
      return "Step can't be blank." 

보기

class MyApp.Views.ChainsNew extends Backbone.View 

    # @template is defined by a conditional inside render() 
    initialize: -> 
     @is_saving = false 

    events: 
     'click #btn-go': 'add_step' 
     'click #btn-done': 'save' 

    render: (step_number) -> 
     @model.step_number = step_number 

     @template = if @model.step_number is 1 then JST['chains/new'] else JST['chains/step'] 
     $(@el).html(@template({previous_step_text: @model.get('steps')[step_number - 2]})) 

     @ 

    add_step: -> 
     #divide array into arrays of steps before and after step being edited 
     steps = @model.get('steps') 
     array1 = steps.slice(0, @step_number - 1) 
     array2 = steps.slice(@step_number) 
     array1.push(@$el.find('textarea').val()) 
     newArray = array2.concat(array1) 

     if [email protected]({steps: newArray}, {validate: true}) 
      alert(@model.validationError) 
      false 
     else 
      true #need to a return a value for the `save` method 

    save: -> 
     @is_saving = true 
     if @add_step 
      @model.save(null, { 
       success: -> 
        console.log(arguments) 

       error: -> 
        console.log(arguments) 
      }) 

내가 콘솔에 바로 전에 메시지를 기록했기 때문에 나는 @model.save가 호출되고 있음을 알고 (기타의 단어 if @add_step이 참).

+0

아마도 'url' 매개 변수를'urlRoot'의 맨 위에있는 모델에 추가해야할까요? – aledalgrande

+0

@aledalgrande - 방금 주사위를 굴려 보았습니다. – maxedison

답변

2

아마도 모델의 유효성이 확인되지 않아 save이 false를 반환하고 API 호출을하지 않습니다. 사용해보기

class MyApp.Models.Chain extends Backbone.Model 
    defaults: 
     steps: [] 
     id: null 

    urlRoot: '/chains' 

    validate: (attrs) -> 
     if $.trim(attrs.steps[@step_number - 1]) == '' 
      console.log "Houston, we have a problem" 
      return "Step can't be blank." 

콘솔에 메시지가 표시되면 문제가 있습니다. validate 함수를 완전히 주석 처리 할 수도 있으며 모든 상황에서 API 호출을 수행해야합니다.

+0

감사! 그리고 그것은 저를 진정한 범죄자로 이끌었습니다 - 제 coffeescript 구문의 실수. – maxedison

관련 문제