Как вызвать javascript при разбивке на страницы и записи выбора таблиц данных?

Я использую Datatables для отображения данных в табличной форме. Я использую библиотеку jQuery Raty для отображения 5 звезд в столбце.

Проблема в том, что на первой странице библиотека Raty работает (поскольку элемент DOM присутствует), но когда я разбиваю, сортирую или выбираю размер страницы в Datatables, появляются новые записи, которых раньше не было, и Raty нет неявно работает.

Мне нужно снова позвонить Raty для разбивки на страницы, сортировки и т. д. Как я могу это сделать? Есть ли лучший способ решить эту проблему?

Пожалуйста, помогите и направьте.

РЕДАКТИРОВАТЬ:

Это моя инициализация с данными:

$('#mydatatable').dataTable({
            "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
            "sPaginationType": "bootstrap",
            "oLanguage": {
                "sLengthMenu": "_MENU_ records per page",
                "oPaginate": {
                    "sPrevious": "Prev",
                    "sNext": "Next"
                }
            }
        });

В то время как инициализация Raty lib выглядит следующим образом:

$('.star').raty({ 
                readOnly: true,
                score: 3.26
                });

В HTML-разметке столбец raty выглядит так:

<td><div class="star" ></div></td>

где просто еще один столбец в Datatables.


person LittleLebowski    schedule 02.03.2013    source источник
comment
Покажите нам свой код проблемы.   -  person Lowkase    schedule 02.03.2013
comment
Код добавлен. Пожалуйста, руководство.   -  person LittleLebowski    schedule 02.03.2013


Ответы (1)


Может попробовать fnDrawCallback в datatables? Посмотрите, как он используется здесь: http://live.datatables.net/#preview.

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

i.e.

$('#mydatatable').dataTable({
    "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
        "sPaginationType": "bootstrap",
        "oLanguage": {
        "sLengthMenu": "_MENU_ records per page",
            "oPaginate": {
            "sPrevious": "Prev",
                "sNext": "Next"
        }
    },
        "fnDrawCallback": function (oSettings) {
// I would suggest adding some code here to conditionally check if it hasn't already
// been initialised on a particular .star element
        $('.star').raty({
            readOnly: true,
            score: 3.26
        });
    }
});
person Benno    schedule 02.03.2013
comment
Позвольте мне попробовать это и вернуться к вам. - person LittleLebowski; 02.03.2013
comment
Это работает как шарм. Большое спасибо за быстрое решение. Сэкономил мне много головной боли. :) - person LittleLebowski; 02.03.2013
comment
Без проблем! Я только что добавил примечание к своему ответу - я бы предложил попытаться обернуть raty init в fnDrawCallback в некоторую условную проверку, чтобы увидеть, был ли он инициализирован/не был инициализирован в конкретном экземпляре .star... например. если raty добавляет класс, возможно, вы могли бы сделать .star[class!=some_raty_class] просто для предотвращения повторной инициализации одной строки, в которой он уже есть (в случае фильтрации результатов) (или плагин может даже просто сделать это сам!) - person Benno; 02.03.2013
comment
Вы правы. Я добавлю некоторый код, чтобы проверить его, и он будет инициализирован, только если он не был инициализирован раньше. Понятно! Потрясающий. Еще 1 вещь: можно ли прикреплять целые значения к элементам в таблицах данных, например. в этом случае я показываю звезды, но я хотел бы отсортировать их по звездам. Например, 5 самых высоких, 1 самый низкий... как я могу это сделать в этом сценарии? - person LittleLebowski; 02.03.2013
comment
Да, есть, хотя вам нужно либо создать для нее пользовательскую функцию, либо, если вы можете сбросить рейтинг в разметку при создании таблицы, это будет работать с использованием параметра числовой сортировки скрытого заголовка (datatables.net/plug-ins/sorting#functions_data_source), вам нужно будет добавить этот код в файл сценария. - person Benno; 02.03.2013
comment
Да, спасибо, идея пришла из stackoverflow.com/questions/7668047/ Работает! ТАК скалы! - person LittleLebowski; 02.03.2013