2011-07-05 2 views
0

backbone.jsを使用してフォームを送信しようとしています。この場合、thisは使用できません。だから私は引数を使ってフォームの内容をjsonにシリアル化することを望んでいます。Backbone.jsイベントを.createからフォームのシリアル化

どうすればよいですか?

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

あなたの機能で「this」を使用できない理由が私は興味があります。 DOMイベントがonSubmit検証機能に配線されます

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

:あなたはあなたのビュー内のイベントを提出する登録した場合、あなたはこのようなものがあるかもしれません。あなたは、属性を取得し、それを保存する前に、あなたのモデルでそれらを設定するために、あなたのSerializeメソッドで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() 
    }; 
} 

:onSubmit検証機能は、次のようになります。また、必要に応じて保存することもできます。フォームデータを取得するためのよりエレガントな方法があるかもしれませんが、これは私が常に使用するテクニックです。

+0

しかし、私は呼び出されたフォーム全体をシリアル化したいと思います。 –

+0

私が遭遇したいくつかの問題を追加しました。 –

+0

フォーム全体をシリアライズするには、戻りハッシュ内で必要なプロパティとセレクタを追加します。私は例として1つしか示していませんが、最小限の例として取り上げることができます。 –

関連する問題