2013-04-26 2 views
2

나는이 모델이 내가 기대Backbone - 배열에 속성을 this.model.save()하는 방법?</p> <pre><code>var Contact = Backbone.Model.extend({ defaults: function() { return { idc: "" name: "" email: "", phones: new Array() } }, urlRoot: 'admin/contact' }); </code></pre> <p>이 양식 (템플릿을 강조) :

 e.preventDefault(); 

     var formData = {}, 
      prev = this.model.previousAttributes(); 

     $(e.target).closest("form").find(":input").each(function() { 
      var el = $(this); 
      formData[el.attr("name")] = el.val(); 
     }); 

     this.model.set(formData); 
     this.model.save(); 
     this.render(); 

:

<form> 
    <input type="hidden" value="{{ idc }}" /> 
    <p> 
     <label>Name:</label> 
     <input type="text" name="name" value="{{ name}}" /> 
    </p> 
    <p> 
     <label>Email:</label> 
     <input type="text" name="email" value="{{ email }}" /> 
    </p> 
    <p> 
     <label>Phones:</label> 
     <input type="text" name="phones[]" value="" /> 
     <input type="text" name="phones[]" value="" /> 
     <input type="text" name="phones[]" value="" /> 
    </p> 
    <button class="cancel">Cancel</button><button class="save">Save</button> 
</form> 

을 그리고 연락보기에이 기능을 다른 이름으로 저장을 클릭하면 함수가 호출 될 때 phones과 함께 PHP 파일로 보낼 배열을 생성하므로 데이터베이스에 저장할 수 있습니다. 그러나 브라우저 콘솔에서 속성 배열의 값은 다음과 같습니다. []

PHP 파일에 전달할 수있는 것이 있습니까?

추 신 : 배열은 formData 배열에 있지만, this.model.save()을 호출하면 배열이 손실 된 것처럼 보입니다.

어쨌든, 감사합니다!

답변

1

문제는 기본적으로 jQuery의 serializeArray을 사용하는 것입니다. 당신은 모든 형태의 요소에 대한 모델을 생성 할 경우이 (JQuery와 문서에서 가져온 예를 JSON) 같은 JSON을 생산하기 때문에 serializeArray은 중대하다 :

[ 
    {name: 'firstname', value: 'Hello'}, 
    {name: 'lastname', value: 'World'}, 
    {name: 'alias'}, // this one was empty 
] 

그러나, 당신이 원하지 않는, 당신이 원하는 결합 된 요소들로부터 하나의 모델을 생성한다. 다른 말로하면 :

{ 
    firstname: 'Hello', 
    lastname: 'World', 
    alias: undefined 
} 

원하는 경우 출력을 생성하는 jQuery 플러그인이 있지만 직접 작성하는 것이 좋습니다. 앱 특별히 맞춤형 데이터 당신이 원하는 정확한 방법을 직렬화 것

this.model.set('name', this.$('[name="name"]').val()); 
this.model.set('email', this.$('[name="email"]').val()); 
// etc. 

: 당신이 onSubmit 핸들러와 양식보기가있는 경우, 당신은 뭔가를 할 수 있습니다.

+0

내가 무슨 뜻인지 알겠지만 배열에 대해 이야기하고 어떻게 가져 와서 PHP 파일을 보낼 수 있습니까? 체크 박스를 사용하는 것처럼 하나 또는 여러 개의 전화가 될 수 있습니다. –

+0

모델 중 하나의 속성으로 배열을 가져올 수 있다면, 모델의'toJSON'은 유효한 JSON으로 변환해야합니다.'save'를 사용하면 서버 (PHP 코드)로 보내질 것입니다. 모델에'url' (또는'urlRoot')을 지정하십시오. – machineghost