Mootools Request.JSON динамический обратный вызов - PullRequest
2 голосов
/ 10 февраля 2012

Разработка приложения, в котором все табличные данные возвращаются в виде объекта.

Некоторые ячейки будут иметь события щелчка.

Объект JSON возвращается нормально, и в вызове объекта есть ключ 'cb'.

Это устанавливается логикой на сервере.

Мой вопрос: ключ объекта cb будет содержать строку, как я могу запустить ее как допустимую функцию без использования eval ()

Пример:

var archive = function() {
    console.log('archiving');   
}

new Request.JSON ({
    ...
    onSuccess: function(r){
        //r.cb: 'archive'
        docuemnt.id(td).addEvent('click', r.cb);
    }
    ...
});

docuemnt.id (td) .addEvent ('click', eval (r.cb)); // работает в поисках альтернативы

Я знаю, что переборщил с этим, и это не должно быть так сложно. Должно быть, сегодня еще не хватило кофе.

1 Ответ

3 голосов
/ 10 февраля 2012

Используйте обозначения в квадратных скобках.Если ваша функция находится в глобальной области, используйте window[r.cb]:

new Request.JSON ({ 
    ... 
    onSuccess: function(r) { 
        //r.cb: 'archive' 
        document.id(td).addEvent('click', window[r.cb]);
    } 
    ... 
}); 

Если ваша функция не находится в глобальной области, переместите ваши функции в объект:

var callbacks = {
    archive: function () { ... },
    foo: function () { ... },
    ...
}

Затемиспользуйте callbacks[r.cb].

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