2

この 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
    }
});
4

1 に答える 1

0

神様、お手数をおかけして申し訳ありません。誰も私が実行しなければならないとは言わなかった

cartItem.setArticle(myArticle);

協会にアクセスする前に。-.-

于 2013-10-03T15:51:26.067 に答える