0

我正在使用 Rails + Backbone + Faye 制作示例聊天应用程序。

我目前能够使用 Faye 的消息传递功能在创建事件上写入 DOM,尽管我实际上并没有实例化主干模型。Ala Ryan Bates 的教程我只是在里面打电话

创建.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);
});

我想稍微重构一下并利用主干的模型。一个很好的用例是删除方法。

我的聊天模型绑定到一个点击事件,删除哪些调用:

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

Backbone 将调用 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(); 在 faye 客户端而不是在聊天模型中。这甚至可能吗?

4

1 回答 1

1

好吧,您应该在模型上删除并让 UI 侦听事件并自行刷新。一旦 UI 反映了模型的变化,你就是黄金。

您在这里遇到的问题是 Backbone 集合/模型不是身份映射。因此,您在视图中处理的模型对象与您将实例化并从 faye 回调中删除的模型对象不同。如果您的消息集合可全局访问,那么我建议您从那里获取实例并将其删除。

于 2011-09-14T13:57:41.227 回答