2014-06-25 6 views
0

양식을 내 백본/마리오넷 앱에 제출 한 후 기존 모델을 저장하는 데 문제가 있습니다.양식 데이터에서 모델 특성이 삭제되었습니다.

그래서 양식을 제출하고 backbone.syphon을 사용하여 양식 데이터 표현을 만듭니다. 내가 구축 목적은 다음과 같습니다

{languages: { 
    { 
     de_DE: { 
      default: false 
      enabled: true 
     }, 
     en_US: { 
      ... 
     } 
     ... 
    } 
} 

나는이처럼 보이는 그 속성을 백본 모델에 저장하기 위해 노력하고있어 :

attributes: { 
    id: "5" 
    languages: { 
     de_DE: { 
      default: false, 
      label: "German" 
      language: "de_DE" 
      selected: false 
     }, 
     en_CA: { 
     ... 
     }, 
     ... 
    } 
} 

문제는 그 나는 기존의 모델을 저장할 때 내 데이터에 위 데이터 구조를 사용하여 model.save(data)을 사용하면 기본 및 레이블 인스턴스가 내 모델에서 완전히 제거됩니다. 심지어 서버에 전송되지도 않습니다. 그들은 previousAttrs 개체에 앉아 있지만 완벽하게 제거되었습니다.

내 모델의 동기화 설정의 예를 그렇게 보이는 : 내가 잘못 뭐하는 거지

sync: function(method, model, options){ 
    var baseUrl = window.location.origin+'/qp-api/v1/master-app/'; 

    var config = {} 

    switch(method){ 
     case "create": 
     break; 
     case "read": 
      config = _.extend(config, { 
       method: "GET", 
       url: baseUrl+this.id+'/languages' 
      }); 
     break; 
     case "update": 
      config =_.extend({ 
       method: "PUT", 
       url: baseUrl+this.id+'/languages' 
      }); 
     break; 
     case "delete": 
     break; 
    }; 
    options = _.extend(options, config); 

    return Backbone.Model.prototype.sync.call(this, method, model, options); 
}, 

? 백본의 저장 기능은 변경된 attrs 만 업데이트 할 것이라고 생각했습니다. 내 데이터 객체가 내 모델 attrs의 설정에 매핑되어야하는 것처럼 보입니다. 그들은 단지 갱신하면 안된다. 기존 모델의 저장 방법에 대해 이해하지 못했습니까?

+0

'model.save()'를 사용하고 있습니까? –

+0

Yessir. 그래서 내 모델의 이름은 언어이고 나는 다음과 같은 코드를 작성합니다 : 'if (languages.save (data) {' '....' }}' –

답변

2

처음에는 그러한 검사를하는 것이 좋지 않다고 언급하고 싶습니다. if(languages.save(data){ .... }). model.save()promise object을 반환하므로 if 상태가 예상대로 작동하지 않습니다.

문제의 해결책 중 하나는 언어 모델의 save 메소드를 무시하는 것입니다.

var Languages = Backbone.Model.extend({ 
    // Declaration of you model 
    save: function (attrs, options) { 
    // merge attrs here with defaults/initial values 
    return this.constructor.__super__.save.call(this, attrs, options); 
    } 
}) 

희망이 있습니다.

+0

실제로 도움이되었습니다. 고맙습니다. :) –

+0

당신은 오신 것을 환영합니다. :) –

+0

게다가, 당신이 "옳은 대답"으로 답변을 표시하거나 그것이 당신을 도운다면, 투표 할 수 있습니다. –