2011-07-05 4 views
0

양식을 제출하려고 할 때 backbone.js를 사용하고 있습니다. 이 경우에는 this을 사용할 수 없습니다. 그래서 json에 양식 내용을 직렬화하기 위해 인수를 사용하기를 희망합니다.Backbone.js 이벤트는 .create에서 양식을 serialize합니다.

어떻게하면됩니까?

window.UserView = Backbone.View.extend({ 
    el: 'body', 
    model: new window.UserList, 
    template: _.template($('#user-view-template').html()), 
    events: { "submit form#newUser": "addItem" }, 
    initialize: function() { 
     _.bindAll(this, 'render', 'update', 'addItem'); 
     this.model.bind('refresh', this.render); 
     this.update(); 
    }, 
    render: function() { 
     $("#listContainer").html(this.template({ users: this.model.toJSON() })); 
     return this; 
    }, 
    update: function() { 
     this.model.fetch(); 
    }, 
    addItem: function (e) { 
     e.preventDefault(); 
     var person_attrs = $(e.target).serializeObject(); 
     this.model.create(person_attrs, { 
      success: function (saved_person, data) { 
       if (data.Result == "Success") { 
        alert("success, new Id: " + data.Model.Id); 
       } 
       else { 
        //Need to remove the model from the collection 
        alert(data.Message); 
       } 
      }, 
      error: function (aborted_person, response) { 
       alert("Server Error"); 
      } 
     }); 
     return false; 
    } 
}); 

지금까지 직렬화하여 서버에 전송하는 형식이 있습니다. 이것이 올바른 방법일까요?

는 또한 몇 가지 다른 문제가 :

  1. 제거하거나 서버에서 오류를 반환하는 경우 로컬 모델을 만들 취소 할 수 있습니다.
  2. 서버 결과가 "성공"이면 반환 된 ID를 모델에 할당하고 싶습니다.
  3. 보기를 새로 고칩니다. 나는 서버가 돌아온 후에 refresh 이벤트가 호출 될 것이라고 생각했다.
+0

DOM 조작을 위해 Zepto 또는 jQuery를 사용하고 있습니까 (참고 -해야합니까)? – Shakakai

+0

Shakaai - Jquery –

+0

지나치게 복잡한 질문은 답변을 방해하는 경향이 있습니다. 짧고 집중적 인 것이 훨씬 낫다. id 속성을 처리 할 모델에 대한 구문 분석 메소드에 대해 읽어야합니다. 뷰 메서드를 모델의 change 이벤트에 바인드하지 않으면 뷰가 새로 고쳐지지 않습니다. 문서에서 이벤트 바인딩에 대해 읽어야합니다. –

답변

3

내가 왜이 기능을 사용할 수 없는지에 관심이 있습니다. DOM 이벤트는 태그의 onsubmit 함수에 유선됩니다

events: { 
    "submit form": "onSubmit" 
}, 

: 당신이 당신의보기에서 이벤트를 제출하여 등록 한 경우는 다음과 같다 뭔가가있을 수 있습니다. 태그의 onsubmit 함수는 다음과 같을 것이다 : 당신이 속성을 획득 한 다음 저장하기 전에 모델을 설정하여 직렬화 방법에 JQuery와 선택기를 사용할 수

onSubmit: function(e) { 
    e.preventDefault(); 
    var attrs = this.serialize(); 
    if (this.model.set(attrs)) { 
    // Do something here. 
    } 
}, 

serialize: function() { 
    return { 
    message: $("textarea[name='message']").val() 
    }; 
} 

. 원하는 경우 저장할 수도 있습니다. 양식 데이터를 가져 오는 더 우아한 방법이있을 수 있지만,이 방법은 항상 사용하는 기술입니다.

+0

하지만 나는 호출 된 전체 양식을 직렬화하고 싶습니다. 내 질문을 업데이트하겠습니다. –

+0

나는 더 많은 문제를 추가했습니다. –

+0

반환 해시에서 필요한 속성과 선택기를 추가하여 전체 양식을 serialize합니다. 예를 하나만 제시했지만 최소한의 예를들 수 있습니다. –