2

ビュー内のストアからのデータを使用してグリッド パネルを単純にロードしようとしていますが、次のエラーが発生し続けます。

TypeError: name is undefined
Line: if (name === from || name.substring(0, from.length) === from) {

パネルを初期化する方法を実験しました。現在持っているものは次のとおりです。

Ext.define('BP.view.induction.RightPage', {
extend: 'Ext.tab.Panel',
alias : 'widget.rightpage',

title: "Right Page",    

items: [
    {
        title: 'Tasks',
        html: '',
        cId: 'tasksTab',
        initComponent: function() {
            this.add( [{
                store: 'Tasks',
                xtype: 'taskgrid',
                hideHeaders: true,
                columns: [
                    {
                        text     : 'Task ID',
                        flex     : 0,
                        sortable : false,
                        hidden   : true,
                        dataIndex: 'id'
                    }, 
                    {
                        text     : 'Task',
                        flex     : 1,
                        sortable : false,
                        dataIndex: 'name'
                    },

                ]
            }]);

            this.callParent();
        } 
    },{
        title: 'Content',
        html: '',
        cId: 'contentTab'
    }
]
});

もともと私は initComponent 関数を持っていませんでしたが、代わりにアイテムをすぐに構築しましたが、これは同じエラーを引き起こしました。

[編集] リクエストに応じて、ストアの定義は次のとおりです。

Ext.define('BP.store.Tasks', {
extend: 'Ext.data.Store',
requires: 'BP.model.Task',
model: 'BP.model.Task',
proxy: {
    type: 'ajax',
    url : '/resources/data/tasks.php',
    reader: {
        type:'json',
        root:'tasks'
    }
},
autoLoad: true
});

完全なデータは扱いにくいですが、サンプル (json 形式) を次に示します。

{"success":true,
"tasks":[
    {"id":1,"name":"Cleaning Products","content":"Lorem ipsum...","resource_type":"text","resource_url":"","category_id":1},
    {"id":2,"name":"Preservatives","content":"Lorem ipsum...","resource_type":"text","resource_url":"","category_id":1}]
}
4

4 に答える 4

5

initComponentはクラス定義に入ります。コードサンプルでは、​​initComponentメソッドを設定しようとしている一般的なタスクパネルを使用してタブパネルを作成しています。そのinitComponentメソッドが必要な場合は、タスクグリッド用に別のクラス定義を作成する必要があります。インライン化することはできません。

さらに、あなたがしていることは、パネルを重ねることです。グリッドパネルをタブパネルに追加すると、自動的にタブの1つになります。グリッドを別のパネルにラップする必要はありません。

デバッグ時:必ずExtJS libのデバッグバージョン(またはdevバージョン)を使用してください。FFまたはChromeを使用してデバッグします(どちらか好きな方)。FFを使用する場合は、Illuminations for Developersと呼ばれるFirebugアドオンを入手してください。これは、レイアウトの問題を解決し、コンテナシップとネストの問題を理解するのに非常に役立ちます。また、サーバーからロードされた後のストア内のレコードを確認することもできます。

于 2012-11-13T17:53:21.883 に答える
5

dbrin の回答に加えて、エラーの原因となるtaskgridというウィジェットを定義していないと確信しています。

とにかく、initComponent()メソッドとメソッドを削除しadd()ます。あなたの場合、すべてをitems:[](subnote 2) に直接割り当てることができます。これは同じ結果になり、それを行う適切な方法です。このadd()メソッドは、すでに作成されているインスタンスで呼び出されます (これもエラーの原因になる場合があります。サブノート 1 を参照してください)。空のhtmlプロパティもスペアにします。

サブノート

  1. initComponent()クラス定義メソッド内で add のようなメソッドを呼び出す必要がある場合は、callParent(arguments);最初に呼び出したことを確認する必要があります。

  2. コード例


Ext.define('BP.view.induction.RightPage', {
extend: 'Ext.tab.Panel',
alias : 'widget.rightpage',

title: "Right Page",    

items: [
    {
        store: 'Tasks',
        title: 'Tasks',
        xtype: 'taskgrid',
        cId: 'tasksTab',
        hideHeaders: true,
        columns: [
            {
                text     : 'Task ID',
                sortable : false,
                hidden   : true,
                dataIndex: 'id'
            }, 
            {
                text     : 'Task',
                flex     : 1,
                sortable : false,
                dataIndex: 'name'
            }
        ]
    },{
        title: 'Content',
        cId: 'contentTab'
    }
]
});

編集

xtype は定義済みの別名です。現在、4 つあります。ウィジェット機能レイアウトプラグイン。コンポーネントの場合は、ウィジェット タイプを使用します。alias: 'widget.yourname'独自の xtype を使用すると、自分で定義できます。xtype: 'yourname' なぜグリッドがレンダリングされないのかを知るのは難しいです。拡張機能内の定義またはレンダリング先のコンテナーに依存する場合があります。

于 2012-11-13T18:42:04.447 に答える
1

アーキテクトを使用してプロジェクトを構築するときにも同じ問題がありました。プロキシ構成の構文エラーであることが判明しました。このように変更してみてください。それは私のために働いた。URL だけでなく、読み取りパラメーターを使用して API を指定します。

proxy: {
    type: 'ajax',
    api: {
        read: '/resources/data/tasks.php'
    },
    reader: {
        type: 'json',
        root: 'tasks'
    }
}
于 2013-08-14T19:41:51.580 に答える