Как асинхронно вызвать метод?
Пишу плагин для jQuery. В настройках плагина есть объект, содержащий метод render:
columns: { id: { name: '', isSearch: false, isSortable: true, render: function (content) { return '<td>' + content[id] + '</td>'; } }, В метод render передаю объект content. Код выполняется асинхронно. Получаю ошибку: ReferenceError: id is not defined Код, из которого вызывается метод: var request = ajax.index(settings); request.done(function(result) { for (var column in result) { html += settings.columns[column].render(content); } } Сам объект content: Object { id=1, type="main", parameter="sitename", ...} Мне нужно получить доступ к свойствам объекта content в методе render. Подскажите, пожалуйста, как правильно это сделать? |
Есть такой вариант на костылях:
render: function (content) { if (typeof content !== 'undefined') if (typeof content.id !== 'undefined') { return '<td>' + content.id + '</td>'; } } Так работает и всё же хотелось бы более грамотное решение. Что бы не писать if (typeof content !== 'undefined') в каждом такой функции. |
return '<td>' + content['id'] + '</td>'; |
Цитата:
Так тоже не работает. ![]() |
PMaster,
потому что здесь for (var column in result) { html += settings.columns[column].render(content); } content нигде не определяется. |
Цитата:
|
Цитата:
Цитата:
В консоли написано undefined - значит, undefined. Браузеру виднее. |
Цитата:
let obj = {id: 123}, s; try{ s = 'keeeek' + obj[id]; alert(s); } catch(e){ alert(e); } try{ s = 'blablabla' + obj['id']; alert(s); } catch(e){ alert(e); } |
А. Я с этим вариантом сравнивал:
Цитата:
|
Цитата:
Могу сказать, почему в браузере - undefined. Выше писал, что код асинхронно работает. При инициализации настроек jQuery плагина метод render почему-то запускается, при этом никаких данных никто ему не отправлял. Видимо это происходит при объединении настроек: settings = $.extend(true, {}, defaults, options); На данный момент я добавил еще один параметр async. При асинхронном вызове явно задаю параметр в true: render: function (async, content) { if (async == true) return '<td>' + content.id + '</td>'; } Такой код работает, правда с костылем. |
Часовой пояс GMT +3, время: 14:28. |