0

Rails + Backbone+Fayeを使用してサンプルチャットアプリケーションを作成しています。

現在、Fayeのメッセージング機能を使用して、createイベントでDOMに書き込むことができますが、実際にはバックボーンモデルをインスタンス化していません。AlaRyanBatesのチュートリアル私はただ内部で呼んでいます

create.js.erb

  <% broadcast "/messages/new" do %>
      $("#chats-table").append("<%= escape_javascript render :partial => "chat", :locals    => { :chat => @chat } %>");
  <% end %>

そしてそれを別のJavaScriptで公開します:

faye.subscribe("/messages/new", function(data) {
    eval(data);
});

これを少しリファクタリングして、バックボーンのモデルを活用したいと思います。良いユースケースはdeleteメソッドです。

私のチャットモデルはクリックイベントにバインドされています。どの呼び出しを削除しますか。

model.destroy();
this.remove();

バックボーンはdeleteメソッドを呼び出し、削除リクエストを/ entity/idに送信します

また、rails'/views/delete.js.erb'をディスパッチします。そこで、Rubyコードでメッセージを公開するヘルパーメソッドを呼び出します。

 <% broadcast "/messages/delete" do %>
     <%= @chat.to_json.html_safe; %>
 <% end %>

リスナー

    var faye = new Faye.Client('http://0.0.0.0:9292/faye');
    faye.subscribe("/messages/delete", function(data) {
    }); 

ここで、削除されたバックボーンモデルを何らかの方法でインスタンス化して、そのイベントをすべてのユーザーの画面にプッシュし、DOMから削除できるかどうか疑問に思いました。基本的に、this.remove();を呼び出したいと思います。チャットモデルではなく、フェイクライアントの内部。これも可能ですか?

4

1 に答える 1

1

モデルを削除して、UIにイベントをリッスンさせ、それ自体を更新する必要があります。UIがモデルの変更を反映すると、あなたは黄金になります。

ここでの問題は、バックボーンコレクション/モデルがIDマップではないことです。したがって、ビューで処理しているモデルオブジェクトは、インスタンス化してフェイコールバックから削除するものと同じではありません。メッセージコレクションにグローバルにアクセスできる場合は、そこからインスタンスを取得して削除することをお勧めします。

于 2011-09-14T13:57:41.227 に答える