3

だから私は、機能を持つパネルにアイテムを動的に配置しようとしていslidenavigationます:

// FlyoutNavigation.js
Ext.define("APN.view.FlyoutNavigation", {
    id: "flyoutNavigationPanel",
    拡張: 'Ext.ux.slidenavigation.View',

view別のビューでの初期化は次のとおりです。

        // MainViewContainer.js
        this.home = "いくつかの変数"
        this.flyout = Ext.create('APN.view.FlyoutNavigation', {
            id: 'flyoutNavigationPanel',
            ホーム: this.home
        });

セクションでこの変数を使用しようとしてthis.config.itemsいますが、うまくいきません。Sencha は最初にすべてをコンパイルし、コンポーネントを初期化するのではなく、間違っている可能性があります。私は Sencha Framework に本当に慣れていません。

したがって、home変数が使用されているビューは次のとおりです。

Ext.define("APN.view.FlyoutNavigation", {
    id: "flyoutNavigationPanel",
    拡張: 'Ext.ux.slidenavigation.View',
    xtype: 'flyoutnavigation',
    必要: [
...省略されたものの山...
    ]、
    初期化: 関数 () {
        this.callParent();  
        this.setupDynamicItems();
    }、
    構成: {
        項目: [
            {
                itemId: 'nav_home',
                id: 'ホームビュー',
                項目: [{
                        xtype: '記事リスト',
                        id: 'latestNews',
                        feedUrlName: this.home, // - UNDEFINED が発生する場所です
                        フレックス: 1
                    }
                ]、
            }、

this.home未定義もそうです...

この質問から来る1つの可能な解決策: Sencha Touchでxtypeテンプレートを動的に作成する方法

すべてのコードを入れることにしましたthis.config.items.add({ ... my items ... })Ext.ux.slidenavigation.View、バグが発生したようです! :( 初期化メソッドは、ビューのアイテムのバインド メソッドの後に発生しFlyoutNavigationます。

バグのメッセージは次のとおりです。Uncaught TypeError: Cannot read property 'raw' of undefined View.js:310これは基本的に次の行です。if (Ext.isFunction(item.raw.handler)) {

だから私の質問は

  1. config.items セクションでインスタンス変数を取得するには? それが可能なら、すべてがOKです
  2. または、この問題の回避策を知っていますか?

ありがとう

4

1 に答える 1

3

クラスを定義するときは使えないと思いますがthis.config、先ほどお話ししたように初期化関数を使うことができます。したがって、これを行うことができるはずです:

initialize : function() {
    var me = this;
    var home = me.config.home;
    me.add({
        itemId: 'nav_home',
        id: 'homeView',
        items: [{
                xtype: 'articlelist',
                id: 'latestNews',
                feedUrlName: home,
                flex: 1
            }
        ],
    });
}

または、親クラスで定義homeViewした場合、これを行うことができます:

initialize : function() {
    var me = this;
    var home = me.config.home;
    me.down('#homeView').add({
        xtype: 'articlelist',
        id: 'latestNews',
        feedUrlName: home,
        flex: 1
    });
}
于 2013-05-20T09:03:09.577 に答える