Вопрос стратегии JQuery - PullRequest
0 голосов
/ 30 июля 2010

Я перенес фреймворки из прототипа в jQuery в своих приложениях на Rails, и у меня возникла постоянная проблема, по которой мне нужен совет.

Часто я использую функцию AJAX, которая обновляет часть страницы. Когда это происходит, любой другой используемый мной Javascript, относящийся к обновленному разделу страницы, больше не работает. Как лучше обойти это?

Большая часть моего JavaScript находится внутри jQuery (документ) .ready (function () {}); с некоторыми функциями, которые живут за пределами этого метода. Я справлялся с этим, полагаясь на обработчик jQuery .live () или вызывая функцию, которую я хочу «повторно инициализировать» в моих файлах js.erb.

Какой лучший подход? Должен ли я:

  • явно вызывает функции по имени, чтобы работать как часть обратного вызова, чтобы заставить их работать
  • продолжать использовать .live () для отправки / клика по событиям
  • или есть лучший, более эффективный способ справиться с этим

Ждем ваших отзывов и спасибо за ваш совет.

-A

Ответы [ 2 ]

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

В ваших обратных вызовах используйте trigger () для запуска событий. Используйте live () для событий, привязанных к областям DOM, которые обновляются.

Я всегда использую этот шаблон:

Ajax:

$(.link).live("click", function(){
  $.ajax({
        url: '/controller/action',
        success: function(response){
        $(document).trigger("event_name", ["method", response]);
        $('.class').html(response.html);
        }
    }); 
})  

Действие Rails (перерисовка содержимого части):

class Controller < ApplicationController

def action
    render :json => {
          :html => render_to_string(
            :partial => 'partial_name', 
            :locals => {:var => @var}
          )
        }
end
0 голосов
/ 30 июля 2010

aressidi - вы также можете использовать .livequery (), так как это инкапсулирует .live () с несколькими дополнительными колокольчиками и свистками для обратных вызовов и т. Д., Также рассмотрите возможность использования .unbind () для определенных обработчиков событий (таких как переключение и т. Д.).

подробнее здесь: http://docs.jquery.com/Plugins/livequery

Джим

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