これを聞く方法すらほとんどわかりませんが、ここに行きます。
私は2つのモデルを持っています。多くのレシピを含むプラッターです。
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' }
]
}
});
大皿は基本的にオンラインレシピストアの異なるフィルターです。したがって、私は1000のレシピを持っているかもしれませんが、私の「ピザ」プラッターはピザレシピのみを返します(したがって、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);
}
}
});
さて、どうすればプラッターのレシピを作成できますか?Plattersに次のような小さなインラインレシピデータを入力すると、次のようになります。
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'}
]
...それはまっすぐに機能し、パスタを含むデータビューをレンダリングします。だから私は自分の大皿にレシピデータを記入させる方法を知る必要があります。どこで(ある種の初期化イベントのコントローラーで想定しています)、これをどのように接続しますか?そして、私はfilterPropertyを正しく使用していますか?これに関するドキュメントを完全には理解していませんが、通常、私が持っていない外部キーでフィルタリングし、filterPropertyがこれをオーバーライドすると思います。URLに&text=noodleが追加されるようにします。
前もって感謝します。