Rails + Backbone + Faye сообщения, как создать экземпляр модели и удалить ее элемент из DOM для всех подписчиков? - PullRequest
0 голосов
/ 04 сентября 2011

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

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

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);
});

Я бы хотел немного реорганизовать это и использовать модели магистрали. Хорошим вариантом использования будет метод удаления.

Моя модель чата привязана к событию клика, удаление которого вызывает:

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

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

1 Ответ

1 голос
/ 14 сентября 2011

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

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

...