Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.06.2015, 15:11
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Колонка таблицы не показывает данные из связанной моделе
Всем привет.

Есть таблица, которая связана с viewModel и в ней есть одна колонка, в которой находятся данные, связанные через reference, но в этой колонке ничего не показывается. Такое впечатление, что для таблицы данные в эту колонку не подгружаются.

Забиндил вот так:
viewModel: {
        type: 'order'
    },
    bind: {
        store: '{orders}'
    },

Все колонки выводятся как надо, кроме той где reference.

Вот сама колонка:
{
            text: 'Стратегия',
            dataIndex: 'strategy',
            renderer: function(value) {
                if ((value === undefined) || (value === null)) {
                    return '';
                };
                return value['name']; 
            }
        },


Вот так выглядит поле в моделе, связанной с колонкой:
{name: 'strategy', reference: 'StrategyModel'},


Данные с сервера поступают и я могу их видеть по ссылке. Так же если открываю данные из строки таблицы в форме для редактирования, то поле там заполнено, оно у меня в виде комбобокса.

Что интересно, когда открываю форму для редактирования, то данные в колонке с reference появляются как надо. Т.е. при открытии формы всё подгружается или ещё что-то делается и таблица для конкретной строки это видит, а вот сама для всех строк в эту колонку ничего не выводит.

Что и куда надо добавить, чтобы поле с reference начало показывать, ну или наверное точнее, загружать в колонку данные?
Ответить с цитированием
  #2 (permalink)  
Старый 11.06.2015, 16:00
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

вставьте debugger в renderer и поглядите в отладчике что приходит в arguments и почему так получается:
{
            text: 'Стратегия',
            dataIndex: 'strategy',
            renderer: function(value) {
                debugger

                if ((value === undefined) || (value === null)) {
                    return '';
                };
                return value['name']; 
            }
        },
Ответить с цитированием
  #3 (permalink)  
Старый 11.06.2015, 16:12
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Ох, какая вещь хорошая, не знал о таком. Получше чем лог консоли. Спасибо.

Показывает value = undefined для всех строк, ну а когда открываю форму для редактирования, то соответственно, типа, value = Object {id: 82, name: "Новая стратегия", description: "Её описание"}

Я из-за этого undefined и думаю, что просто не грузится другая модель на которое поле модели таблицы ссылается. Но что с этим делать не знаю, думаю есть какая-то опция в настройках, но где и какая мне неизвестно и примеры пока не нашел.

Сообщение от siber-biber Посмотреть сообщение
вставьте debugger в renderer и поглядите в отладчике что приходит в arguments и почему так получается:
{
            text: 'Стратегия',
            dataIndex: 'strategy',
            renderer: function(value) {
                debugger

                if ((value === undefined) || (value === null)) {
                    return '';
                };
                return value['name']; 
            }
        },
Ответить с цитированием
  #4 (permalink)  
Старый 11.06.2015, 17:09
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

В аргументе record рендера присутствуют данные строки, но моя колонка как-то странно там показана. Т.е. в data где все поля перечислены с их значениями, моей проблемной колонки нету, но зато она есть отдельным параметром, при том с подчеркиванием, которое я нигде не ставил. Прикладываю картинку, чтобы понятней было.

Чтобы это могло означать? Что надо сделать, чтобы это всё вставить в общие данные, ну или как правильно получить доступ полю. Ну по крайней мере стало ясно, что данные грузятся в таблицу, вот только не среди прочих, а почему-то отдельно.
Изображения:
Тип файла: jpg 2015-06-11_210553.jpg (27.8 Кб, 5 просмотров)
Ответить с цитированием
  #5 (permalink)  
Старый 11.06.2015, 17:18
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Переписал рендер вот так:
{
            text: 'Стратегия',
            dataIndex: 'strategy',
            renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
                return record._strategy.data.name;
            }
        },


Но что-то мне подсказывает, что это не правильно, что не зря они замаскировали мое поле подчеркиванием. Возможно от такого способа как я сейчас сделал возникнут сбои или ещё какие проблемы?
Ответить с цитированием
  #6 (permalink)  
Старый 11.06.2015, 17:28
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Ну да, не правильно как и подумал. Ошибку и предупреждение пишет:

[W] XTemplate evaluation exception: Cannot read property 'data' of null.

Uncaught TypeError: Cannot read property 'childNodes' of null
Ответить с цитированием
  #7 (permalink)  
Старый 11.06.2015, 19:02
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

есть вот такой метод: http://docs.sencha.com/extjs/5.1/5.1...AssociatedData
а вообще на модели должен быть сгенерирован метод strategies который вернет Ext.data.Store со связанными записями:
renderer : function (value, metaData, record) {
    var strategy = record.strategies().getAt(0);
    return strategy && strategy.get('name');
}
Ответить с цитированием
  #8 (permalink)  
Старый 11.06.2015, 19:26
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

Тут похоже вообще много волшебства, не зная о котором можно два дня безуспешно долбиться об стену как я в данном случае.

Нашел всё же пример с подобной вещью как у меня и был буквально потрясен, что в тихушку творит ExtJS. Оказывается для каждой строки таблицы, для каждой колонки с данными из reference автоматически создаются функции из get+Название поля из модели. В моем случае это оказалась getStrategy().

Я нашел рендера в примере, где он вызывал подобную функцию и я пытался её найти во всех файлах примера и не мог. Функция есть, а реализации её нет! Потом решил посмотреть подобное у себя в реальном времени и был удивлен, найдя её.

Ну вот спрашивается, как я должен был об этом догадаться? Когда решил остановиться на ExtJS, то читал о том что кривая обучения очень крутая, но думал просто пугают, но теперь вижу что были правы.

В общем сделал так, и пока работает:
renderer: function(value, metaData, record) {
                if (record.getStrategy() !== null) {
                    return record.getStrategy().get('name');
                };
            }


Похоже можно и как у вас сделать и как в примере.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать данные в другую панель из выбранной строки таблицы. layout: 'card'. Пролетарий ExtJS 5 03.06.2015 22:53
Контекстное меню как считать данные из таблицы xela1980 jQuery 25 31.05.2013 14:20
JSON - отобразить данные таблицы oracle / mssql / mysql ecivgamer Javascript под браузер 3 14.11.2012 18:17
Выборка сумм из связанной таблицы ArmagedDance Серверные языки и технологии 2 30.06.2011 11:13
Помогите вытащить из таблицы данные... MD6 Общие вопросы Javascript 1 07.10.2008 13:03