Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2015, 20:49
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Data Binding для вида Ext.grid.property.Grid
Здравствуйте!

Пытаюсь связать данных из модели с таблицей propertygrid. Сам биндинг работает, заголовок таблицы выводится. А вот содержимое таблицы почему-то не выводится.

Как это исправить?

Код в песочнице https://fiddle.sencha.com/#fiddle/me0

Ext.onReady(function() {

Ext.define('TestViewModel', {
    extend: 'Ext.app.ViewModel',

    alias: 'viewmodel.test', 

    data: {
        title: "Биндинг работает",
        source: {
            '(name)': 'Property Grid',
            grouping: false,
            autoFitColumns: true,
            productionQuality: true,
            created: new Date(),
            tested: false,
            version: 0.8,
            borderWidth: 2
    	}
    }
});    
    
    
Ext.define('TestView', {
    extend: 'Ext.grid.property.Grid',
    
    

    viewModel: {
        type: 'test'  
    },

    bind: {
        title: '{title}',
        source: '{source}'
    }

    
});    

    
    Ext.create('TestView', {
        renderTo: Ext.getBody(),
        width: 400
    });
    
});
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2015, 12:18
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Дык, во вьюмодели нужно наверное указать стор. PropertyGrid использует PropertyStore:

// Create a property.Store from the source object unless configured with a store
        if (!me.store) {
            me.propStore = me.store = new Ext.grid.property.Store(me, me.source);
        }


http://docs.sencha.com/extjs/5.1/5.1...-initComponent

Хотя нет. Не в этом дело.

Последний раз редактировалось novikov, 07.05.2015 в 12:24.
Ответить с цитированием
  #3 (permalink)  
Старый 07.05.2015, 12:37
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

А это, оказывается, известный баг:

https://www.sencha.com/forum/showthread.php?300024
Ответить с цитированием
  #4 (permalink)  
Старый 07.05.2015, 12:52
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Баг? Ну ясно... ладно, сам подправлю позже. А почему они не дают доступ к своему форуму? Ужа давно хочу туда попасть. Читать можно, писать - нет прав доступа.
Ответить с цитированием
  #5 (permalink)  
Старый 07.05.2015, 13:27
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Вот такая версия работает:

Код в песочнице: https://fiddle.sencha.com/#fiddle/me0

Теперь вопрос, как связаться с sourceConfig?

Ext.onReady(function() {

    Ext.define('TestViewModel', {
        extend: 'Ext.app.ViewModel',
    
        alias: 'viewmodel.test', 
    
        data: {
            title: "Биндинг работает",
            source: {
                    created: Ext.Date.parse('10/15/2006', 'm/d/Y'),
                    available: false,
                    version: 0.01,
                    description: "A test object"
            },
            sourceConfig: {
                created: {displayName: "Создано"},
                available: {displayName: "Доступно"},
                version: {displayName: "Версия"},
                description: {displayName: "Описание"}
            }
        }
    });    
        
        
    Ext.define('TestView', {
        extend: 'Ext.grid.property.Grid',
        
        viewModel: {
            type: 'test'  
        },
    
        bind: {
            title: '{title}',
            //source: '{source}'
            
            source: {
                    created: "{source.created}",
                    available: "{source.available}",
                    version: "{source.version}",
                    description: "{source.description}"
                }
        }
    });    
    
    Ext.create('TestView', {
        renderTo: Ext.getBody(),
        width: 400
    });
    
});
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2015, 22:21
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Чтобы связать sourceConfig пришлось делать производный класс. Но он тоже не работает из-за вышеупомянутого бага.
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2015, 23:05
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

В общем выкрутился вот таким способом:

currentSource: Ext.define("random" + Math.random(), {
			data: {
				created: Ext.Date.parse('10/10/2006', 'm/d/Y'),
				available: false,
				version: 0.01,
				description: "A test object"
			},
			config: {
				created: {
					displayName: "Создано"
				},
				available: {
					displayName: "Доступно"
				},
				version: {
					displayName: "Версия"
				},
				description: {
					displayName: "Описание"
				}
			}
}).prototype



1) для учета sourceConfig придется создавать производный класс
2) для того, чтобы биндились объекты придется объекты оборачивать в

Ext.define("random" + Math.random(), {<здесь сам объект>}).prototype


либо вместо такой обертки можно сделать специальный класс и оборачивать в него, а не плодить толпу таких вот времянок.

Это до поры пока не исправят багу.

П.С. Пробовал оборачивать в new Object() - не помогло. Часть членов ломаются все равно. Если есть по-экономнее обертка - прошу сообщить)

Последний раз редактировалось khusamov, 14.05.2015 в 23:10.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте как улучшить код для работы с history api [ jquery + js + history api ] Geo Ваши сайты и скрипты 0 12.01.2014 00:41
Разработчик Front-а для Big Data платформы (Рязань) basegroup Работа 15 27.12.2013 13:19
Удалению метаданных в JPEG lorents Библиотеки/Тулкиты/Фреймворки 2 22.04.2012 21:02
$('.class').html( data ); для скрытого элемента g-smagin jQuery 2 15.06.2010 14:16