この 2 日間、よく検索しましたが、解決策がわかりませんでした。これが私の問題の説明です:
ビューとして 1 つの単純なリスト、2 つのモデル (CartItem と Article)、2 つの対応するストア (CartItems と Articles) を持つ Sencha Touch アプリがあります。
CartItem モデルには、Article モデルへの「hasOne」関連付けがあります。
リスト ビューには、すべての CartItems が関連記事の説明とともに表示されます。
そんなに難しくないはずですよね?アソシエーションは一般的に機能します。記事の説明は次の方法で取得しました。
> Ext.getStore('cartItemStore').getAt(0).getArticle().get('description')
"Example article 1"
しかし、この説明をリストに表示できません。
私がすでに試したことは、使用することです
1) <tpl for="Article">{description}</tpl>
-> doesn't display anything. Neither data nor an error.
2) {Article.description}
in combination with:
http://appointsolutions.com/2012/07/using-model-associations-in-sencha-touch-2-and-ext-js-4/
-> f***ed up my whole storage-system :/
テンプレートに関連データを表示する方法はありますか? 誰かが解決策を見つけてくれたら本当にありがたいです! 最小限のコード例を次に示します。
Main.js
Ext.define('assoTempl.view.Main', {
extend: 'Ext.dataview.List',
xtype: 'main',
config: {
store: 'cartItemStore',
scrollable: 'vertical',
itemTpl: '<span>{cart_pos} <tpl for="Article">{description}</tpl></span>'
}
});
CartItem.js (CartItem モデル)
Ext.define('assoTempl.model.CartItem', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'cart_pos'},
{ name: 'article_id'}
],
proxy: {
type: 'memory'
},
hasOne: {
model: 'assoTempl.model.Article',
name: 'Article',
foreignKey: 'ANr',
foreignStore: 'ArticleStore'
}
}
});
Article.js (記事モデル)
Ext.define('assoTempl.model.Article', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'ANr', type: 'int' },
{ name: 'description', type: 'String' }
],
proxy: {
type: 'memory'
}
}
});
CartItems.js (カートアイテムストア)
Ext.define("assoTempl.store.CartItems", {
extend: "Ext.data.Store",
requires: ['Ext.data.proxy.Sql'],
config: {
storeId: 'cartItemStore',
model: "assoTempl.model.CartItem",
data: [
{cart_pos:0, article_id:0},
{cart_pos:1, article_id:1}
],
autoLoad: true
}
});
Articles.js (記事ストア)
Ext.define("assoTempl.store.Articles", {
extend: "Ext.data.Store",
requires: ['Ext.data.proxy.Sql'],
config: {
storeId: 'articleStore',
model: "assoTempl.model.Article",
data: [
{ANr:0, description:'Example article 1'},
{ANr:1, description:'I am article 2'}
],
autoLoad: true
}
});