Как асинхронно вызвать метод?
Пишу плагин для 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, время: 06:11. |