Я пытаюсь реализовать пользовательский рендер, который управляет двумя полями из сетки - для первого поля возвращается простая строка, а для второго я запрашиваю базу данных:
...
columns: [{
dataIndex: 'id',
width: 50,
text: 'ID',
field: {
type: 'textfield',
allowBlank: false
},
renderer: function(value, metaData, record, row, col, store, gridView){
return DirectTest.app.getController("PersonalInfo").renderUsername(value, record, col);
}
}, {
dataIndex: 'username',
flex: 1,
text: 'Username',
field: {
type: 'textfield',
allowBlank: false
},
renderer: function(value, metaData, record, row, col, store, gridView){
return DirectTest.app.getController("PersonalInfo").renderUsername(value, record, col);
}
}
...
Проблемав том, что в функции рендерера я вызываю метод Ext.Direct (который является асинхронным).Я пробовал и обещания, и обратные вызовы, и в итоге получил этот уродливый код (только что обернул все условия в обратный вызов Ext.Direct), который не работает - он не возвращает значения:
renderUsername: function(value, record, col){
var col = col;
return QueryDatabase.getResults({page: 1, start: 0, limit: 25}, function(provider, response){
console.log(response.result[0]);
console.log("col = "+col);
switch(col){
case 0:
return "Lilly is a fluffy cat";
break;
case 1:
return response.result[0].username;
break;
}
});
}
Что мне делать?Какое самое элегантное решение?