Я даже не знаю, как спросить это, но здесь идет.
У меня есть две модели, блюдо, которое содержит много рецептов:
Ext.define('NC.model.Platter', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'name', type: 'string' },
{ name: 'text', type: 'string' }
],
associations: [
{type: 'hasMany', model: 'NC.model.Recipe', name: 'recipes', filterProperty: 'text'}
]
}
});
Ext.define('NC.model.Recipe', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'name', type: 'string' },
{ name: 'image', type: 'string' },
{ name: 'stepsText', type: 'string', mapping: 'properties.preparationText' },
{ name: 'ingredientsText', type: 'string', mapping: 'properties.ingredientsText' }
]
}
});
Платформы - это в основном разные фильтры в онлайн-магазине рецептов. Так что у меня может быть тысяча рецептов, но мое блюдо «Пицца» будет возвращать только рецепты пиццы (таким образом, filterProperty). Платформы просто создаются и хранятся локально, а рецепты онлайн. Итак, магазины:
Ext.define('NC.store.Platters', {
extend: 'Ext.data.Store',
config: {
model: 'NC.model.Platter',
storeId: 'Platters',
proxy: {
type: 'localstorage',
id: 'platters'
},
data : [
{name: 'Noodles', text: 'noodle'},
{name: 'Baked', text: 'bake'},
{name: 'Pizza', text: 'pizza'}
]
}
});
Ext.define('NC.store.Recipes', {
extend: 'Ext.data.Store',
config: {
model: 'NC.model.Recipe',
storeId: 'Recipes',
proxy: {
type: 'jsonp',
url: 'xxxx', // url here (redacted)
callbackKey: 'callback',
filterParam: 'text',
extraParams: {
// credentials and tokens here (redacted)
},
reader: {
type: 'json',
idProperty: 'uuid',
}
}
}
});
Теперь я хотел бы создать обзор данных. Список Платтеров, каждый из которых содержит свой список Рецептов:
Ext.define('NC.view.DiscoverGrid', {
extend: 'Ext.DataView',
xtype: 'discovergrid',
id: 'discover',
config: {
title: 'Discover',
baseCls: '',
useComponents: true,
defaultType: 'platter',
store: 'Platters',
ui: 'light'
}
});
Ext.define('NC.view.Platter', {
extend: 'Ext.dataview.component.DataItem',
xtype: 'platter',
config: {
layout: 'fit',
height: '100px',
list: {
itemTpl: '{name}',
inline: true,
scrollable: {
direction: 'horizontal',
directionLock: true
}
},
dataMap: {
getList: {
setData: 'recipes'
}
}
},
applyList: function(config) {
return Ext.factory(config, Ext.DataView, this.getList());
},
updateList: function(newList, oldList) {
if (newList) {
this.add(newList);
}
if (oldList) {
this.remove(oldList);
}
}
});
Теперь, как мне заполнить рецепты блюд? Если я наполнил Платтеров небольшими встроенными данными рецепта, например, так:
data : [
{name: 'Noodles', text: 'noodle', recipes: [
{ name: 'Pasta', ingredientsText: "Tomatoes\nPassata\n1tsp Oregano", preparationText: "Do something\nAdd passata\nmix in oregano and tomato",
ingredients: [{ text: "bla"}]
}
]},
{name: 'Baked', text: 'bake'},
{name: 'Pizza', text: 'pizza'}
]
... он работает прямо и отображает данные с Pasta в нем. Так что мне просто нужно знать, как заставить мои блюда заполнять их данные рецепта. Где (я предполагаю, что в контроллере на событие инициализации какого-то рода) и как мне подключить это? И правильно ли я использую filterProperty? Я не совсем понимаю документы по этому вопросу, но я думаю, что это обычно фильтрует по внешнему ключу, которого у меня нет, и что filterProperty переопределяет это. Так что к URL будет добавлен & text = noodle.
Заранее спасибо.