Как правильно использовать шаблоны Rails JS? - PullRequest
1 голос
/ 29 апреля 2011

Мне просто не понятно, как правильно использовать шаблоны Rails JS.По сути, они заменяют успешный обратный вызов по запросу AJAX, верно?Почему имеет смысл разделять JS, выполняемый, когда запрос является успешным, от JS, который выполняется для различных других обратных вызовов?

Это, конечно, предполагает, что я привязываю обработчик щелчков или что-то кссылку и сделать запрос AJAX таким образом.Конечно, я мог бы использовать link_to с :remote => true.Я полагаю, что в этом случае имеет смысл использовать шаблоны JS.Но тогда что вы будете делать, если вам нужно заниматься другими делами, помимо успеха?Привязать событие ajax:failure к ссылке, сгенерированной link_to?Это будет означать сохранение JS, связанной с этой ссылкой, в двух разных местах.И что произойдет, если есть две ссылки (скажем, с разной разметкой), которые обе отправляют запрос на это действие, но каждая из них требует выполнения другого JS, потому что при нажатии они должны вести себя по-разному?Как бы вы справились с этим с помощью шаблона JS?

Правильно ли я думаю об этом?

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Я думаю, что лучше всего избегать шаблонов js.Попытка написать код js на ruby ​​- это заблуждение ... Это мое мнение, но альтернатива намного чище и проще, потому что вы пишете код на реальном языке.Итак, напишите свой javascript, который выполняет вызов по URL, указанному в вашей ссылке, а затем запросите контент в json.В вашем контроллере просто верните данные в json (это может быть список объектов с данными или просто объект вроде: {success: true} или {success: false}. Затем в вашем js вы обрабатываете объект и делаетесоответствующие действия. В разных частях, которые указывают на один и тот же URL, вы можете выполнять различные действия в своем js.

0 голосов
/ 29 апреля 2011

Вы бы использовали встроенный Ruby (поскольку ваши шаблоны javascript - это файлы js.erb).

Если вы хотите, чтобы разные наборы javascript выполнялись в зависимости от успеха или неудачи, вы бы сделали что-то вроде:

Контроллер:

def my_action
  #some code
  @success = true #or false
  respond_to do |format|
    format.js #you may need to add render :layout => false
    format.html #html fallback 
  end
end

Затем в представлении my_action.js.erb:

<% if @success %>
  //Some javascript for success
<% else %>
  //Some javascript for failure
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...