Итерация по всем виджетам YUI - PullRequest
3 голосов
/ 26 августа 2011

Я ищу способ перебрать все виджеты YUI. Я хотел бы иметь возможность вызывать функцию для всех виджетов.

Я попытался выбрать все элементы с классом yui3-widget, но таким образом я получаю только элемент div, к которому отображается виджет То, что я хочу, это все объекты. Так что это, кажется, не делает то, что я хочу:

YUI().use ('*', function (Y){
    $('.yui3-widget').each (function (idx, elem) {
        var id = elem.getAttribute('id');
        console.log (Y.Widget.getByNode(id));
        console.log ('#'+id);
    })
})

Кто-нибудь из вас предлагает, как это возможно?

1 Ответ

3 голосов
/ 26 августа 2011

Три вещи, на которые стоит посмотреть:

0,1. Объединение библиотек (YUI и Jquery) возможно, но сильно сбивает с толку. Хотя можно предположить, что это необходимо, и катиться с этим.

0,2. "getByNode" ожидает узел YUI или строку селектора. Так что строка должна выглядеть так:

console.log (Y.Widget.getByNode('#' + id));

0,3. Строка YUI().use (... объявляет новую песочницу YUI, которая не содержит никаких виджетов. Ваш список узлов зацикливается на всех соответствующих элементах ".yui3-widget" на странице , но ни один из этих виджетов не зарегистрирован в вашей новой песочнице, поэтому Y.Widget.getByNode('#' + id) вернет ноль. Чтобы исправить это, вам нужно поместить свой код в песочницу, в которой были созданы виджеты, или получить указатель на эту песочницу для вызова функции «use». Что-то вроде:

var sandbox = YUI().use('*', function (Y){

   // widgets defined here
});

sandbox.use ('*', function (Y){
    $('.yui3-widget').each (function (idx, elem) {
        var id = elem.getAttribute('id');
        console.log (Y.Widget.getByNode('#' + id));
        console.log ('#'+id);
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...