Визуализация столбца в сетке с использованием асинхронного вызова функции - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь реализовать пользовательский рендер, который управляет двумя полями из сетки - для первого поля возвращается простая строка, а для второго я запрашиваю базу данных:

...

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;
                }

        });

    }

Что мне делать?Какое самое элегантное решение?

...