Как визуализировать частичный и javascript-файл одновременно в Rails? - PullRequest
0 голосов
/ 11 апреля 2010

Мое главное намерение - сохранить функциональность независимой от Javascript, чтобы она была изящно разложена. Может быть, я пытаюсь пойти туда, куда хочу, но не в том направлении, но главная идея:

  • есть несколько вкладок jQuery UI, и когда пользователь нажимает ссылку, добавляется новая вкладка, соответствующая этому действию
$("#tabs").tabs('add', "/groups", "My Groups");
  • контроллер идентифицирует запрос AJAX и отображает только часть для этой вкладки
if request.xhr?
  render  :partial => "index_tab"
end
  • В данный момент я бы хотел, чтобы выполнялся также файл Javascript, связанный с действием /groups/index, то есть файл index.js.erb в папке groups.
  • из-за правила "только один рендер" я не мог придумать хороший способ сделать это, и мне нужно быстрое решение.

Спасибо за любые ваши предложения.

Ответы [ 2 ]

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

Вы можете сделать это так же, как ваши create и edit представления, показывающие ту же форму с частичным отображением.

_tab.html.erb
<div class="tab" id="<%= tab.id %>">
   <p>whatever</p>
</div>
show.html.erb
<%= render 'tab', :tab => TabObject %>
show.js.erb
$('#tabs.')....
$('something').append("<%= escape_javascript(render('tab', :tab => TabObject)");

И если вы запрашиваете страницу с script dataType jQuery, у вас действительно должны быть соответствующие представления, потому что, хотя rails будет отображать представления html вместо него, jQuery поместит их в тег <script>, который не должен HTML в нем.

0 голосов
/ 11 апреля 2010

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

Создание вкладок может затем вызвать соответствующую обработку кода. Вы можете начать оборачивать это в модель событий с помощью прослушивателей (чтобы код прослушивал вкладки нужного типа, которые нужно добавить), или вы можете просто вызвать функцию, как только ajax-запрос на загрузку был успешно выполнен.

...