Хороший шаблон проектирования для Ruby on Rails с Ajax для следующего сценария? - PullRequest
2 голосов
/ 01 июля 2010

У меня есть две модели A и B, где обновление B в некоторых случаях также вызывает обновления A (сделано в коде модели). Теперь в моем пользовательском интерфейсе я хочу отобразить A и B на одной странице и иметь свои собственные операции (например, обновить какое-то поле в них). Я не хочу перезагружать всю страницу при любом обновлении.

У меня такой вопрос: я хотел бы разделить код пользовательского интерфейса для A и B, и я не хочу, чтобы код в A или B ссылался на другой. Возможно ли иметь дизайн для этого требования? Спасибо.

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Хорошо, поэтому вопрос таков: контроллер для обновления A не должен знать о B и наоборот, однако страница должна обновлять B.

Моя точка зрения будет заключаться в том, чтобы PAGE запросил контроллерРаботай.Затем после успешного запроса туда-обратно запрос на внесение изменений (или повторный рендеринг).Это 2 отключения.

Или вы можете получить ответ rjs в контроллере A и B, указывающий, что обе части страницы должны быть обновлены, без информирования друг друга о модели A или B.

0 голосов
/ 01 июля 2010

Большинство помощников Rails предполагают, что вы просто собираетесь обновить определенный раздел на странице.Самый простой и наименее эффективный способ сделать это - расширить область действия «конкретного раздела», включив в него как элементы представления для A-записей, так и B-записей.(Как вы можете упомянуть, это может быть вся страница).

Повышение эффективности, вероятно, повлечет за собой и большую сложность.Я бы сказал, что это верно и для моего ответа.

Моя непосредственная мысль здесь - это общий механизм событий.Как правило, вы выполняете вызов AJAX для обновления, как обычно, и ответ содержит несколько возвращаемых значений, которые содержат обновления для определенных записей A или B.Например:

{ "A": [
    { "id": 23, "content": "<span>name:</span> Apples" },
    { "id": 52, "content": "<span>name:</span> Oranges" }
  ],
  "B": [
    { "id": 10, "content": "<span>name:</span> Fruits" }
  ]
}

Затем AJAX вызывает обновления как для A, так и для B-записей, а их ответы обрабатываются с помощью single JavaScript-функции.Эта единственная функция затем отправляет обновление в отдельные компоненты представления, которые вы хотите.Думайте об этом как о простом обработчике событий.

Самый простой способ реализовать это, вероятно, состоит в том, чтобы каждый компонент представления регистрировал себя с помощью функции 'update' при загрузке страницы.Затем ваш обработчик событий вызывает все это с помощью объекта JSON.Затем функции обновления получают то, что им нужно, обновляют конкретные элементы, которыми они управляют, и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...