Обмен сообщениями Rails+Backbone+Faye, как создать экземпляр модели и удалить ее элемент из DOM для всех подписчиков?

Я использую Rails + Backbone + Faye для создания примера приложения чата.

В настоящее время я могу использовать возможности обмена сообщениями Faye для записи в DOM по событию создания, хотя на самом деле я не создаю экземпляр модели магистрали. Учебник Ала Райана Бейтса, я просто звоню внутрь

создать.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 вызовет метод удаления и поместит запрос на удаление в /entity/id

Это также отправляет /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, а не в модели чата. Это вообще возможно?


person jdkealy    schedule 04.09.2011    source источник


Ответы (1)


Что ж, вы должны удалить модель и позволить пользовательскому интерфейсу прослушивать событие и обновлять себя. Как только пользовательский интерфейс отражает изменения модели, вы становитесь золотым.

Проблема, с которой вы столкнулись, заключается в том, что коллекции/модели Backbone не являются картой идентичности. Таким образом, объект модели, с которым вы имеете дело в представлении, отличается от того, который вы будете создавать и удалять из обратного вызова faye. Если ваша коллекция сообщений доступна глобально, я предлагаю вам получить экземпляр оттуда и удалить его.

person Julien    schedule 14.09.2011
comment
Спасибо. Да, это то, что я должен был сделать. Я передал идентификатор элемента, получил модель из коллекции и удалил ее из дома, используя ее модель. - person jdkealy; 15.09.2011