Я пытаюсь нарисовать сетку, где каждая строка - производительность запаса за один день. В моих структурах данных у меня есть Date
, a Stock
и ресурс Stock Price
. Магазин, прикрепленный к моей сетке, - это магазин Stock Price
.Как показать значение из ассоциации модели в сетке ExtJS?
Так что, насколько мне известно, моя самая большая проблема заключается в том, что когда рендеринг ячеек сетки, мне нужно уже иметь значение, или мне нужно иметь функцию блокировки до получить значение.
Когда я использую магическую функцию getStore()
, мне говорят, что запись не знает об этом (неопределенный метод). Я предполагаю, что это потому, что запись не имеет той же функциональности, что и автономная модель.
Я вижу несколько путей выхода из этого:
- Настройки сетки и/или магазина, так что, когда нагрузка происходит, все связанные строки загружаются одновременно.
- Создайте обратный вызов в рендерере и измените значение ячейки после этого, но я точно не знаю, как это сделать. Я действительно не хочу менять значение ячейки (
StockId
), только видимый вывод (Symbol
). - Измените свой API, чтобы он соответствовал моему представлению.
Подведение итогов: # 1 кажется большой работой для кажущегося простого результата. Я продолжаю пытаться использовать ассоциации, но я считаю, что они не очень полезны ни для чего, кроме мелочей здесь и там, и, конечно, не для большого количества данных. # 2 Я не совсем знаю, с чего начать в данный момент; и # 3 кажется массивным излишеством и, как правило, разрушает мою серверную сторону, поскольку я имею в виду еще несколько объединений и большую сложность при сохранении записей.
Таким образом, две части вопроса:
- Кто-нибудь знает, как загрузить значение из соответствующей модели в сетке?
- Если нет, чтобы выразить свое любопытство, какие вещи используются для ассоциаций в любом случае, когда на экране есть множество данных? Похоже, что данные Лот являются причиной использования Ext vs jQueryUI или некоторых других интерфейсов пользовательского интерфейса, поэтому мне интересно, для чего нужны ассоциации.
Модель - Stock Price
Ext.define('MyApp.model.StockPrice', {
extend : 'Ext.data.Model',
idProperty : 'StockPriceId',
fields : [ {
name : 'StockId',
type : 'int'
}, {
name : 'Open',
type : 'float'
}, {
name : 'Close',
type : 'float'
}, {
name : 'DateId',
type : 'date'
}],
proxy : {
type : 'rest',
url : '/api/stock.price'
},
reader : {
type : 'json'
},
associations : [ {
type : 'hasOne',
model : 'MyApp.model.Date',
primaryKey : 'DateId',
foreignKey: 'DateId'
},{
type : 'hasOne',
model : 'MyApp.model.Stock',
primaryKey : 'StockId',
foreignKey : 'StockId'
} ]
});
Модель - Векторная
Ext.define('MyApp.model.Stock', {
extend : 'Ext.data.Model',
idProperty : 'StockId',
fields : [ {
name : 'StockId',
type : 'int'
}, {
name : 'Symbol',
type : 'string'
} ],
proxy : {
type : 'rest',
url : '/api/stock'
},
reader : {
type : 'json'
},
associations : [ {
type : 'hasMany',
model : 'MyApp.model.StockPick',
primaryKey : 'StockId',
foreignKey : 'StockId'
}]
});
Модель - Дата
Ext.define('MyApp.model.Date', {
extend : 'Ext.data.Model',
fields : [ 'DateId', 'Date' ]
});
Магазин - Склад Цена
Ext.define('MyApp.store.StockPrice', {
extend : 'Ext.data.Store',
model : 'MyApp.model.StockPrice',
remoteSort : true,
remoteFilter : true,
pageSize : 5,
autoLoad : true
});
View - Stock Price
Ext.define('MyApp.panel.StockData', {
extend : 'Ext.grid.Panel',
store : 'MyApp.store.StockPrice',
columns : [
{
text : 'Symbol',
flex : 1,
sortable : false,
hideable : false,
dataIndex : 'StockId',
renderer : function(stockId, metadata, stockPriceRecord) {
// What goes in here? PROBLEM POINT
MyApp.model.Stock.load(stockId, function() {
// ... some callback
});
// OR
return stockPriceRecord.getStock().get('Symbol');
}
},
{
text : 'Open',
flex : 1,
dataIndex : 'Open',
renderer : 'usMoney'
},
{
text : 'Close',
flex : 1,
dataIndex : 'Close',
renderer : 'usMoney'
},
{
text : 'Volume',
flex : 1,
dataIndex : 'Volume'
}]
});
Принял у меня много настраиваемого кода, но я его получил. Я обнаружил, что мне пришлось вызвать «render» после того, как хранилище «Stock» загрузилось, чтобы затем перерисовать символы, но он работает. Благодаря! – Drew
Пользовательский код действительно, угадайте, поэтому его просто называют «каркасом»! Надеюсь, Sencha продолжит делать такую прекрасную работу по продвижению ExtJS и сделает ассоциации более надежными. – tuespetre