0

選択したデータをツリーパネルからグリッドパネルにバインドする際に問題が発生しています。

ツリーのリーフであるノードを選択すると、その子が下のバインドされたグリッドにロードされます。

それに対する私の解決策は、ストア全体を一度にロードしてから、組み込み機能を使用して結果をフィルタリングすることですが、まだ必要な結​​果を生成していません。フィルターの 1 つが私が望むものを生成していますが、それが唯一のものです (JSFiddle リンクを確認してください) - エラーはスローされません。

JSFiddle でデモンストレーションを作成しました: http://jsfiddle.net/E3LPa/

問題はこのコントローラーにあると思います:

Ext.define('Exxica.controller.CalculationSidebar', {
    extend: 'Ext.app.Controller',

    models: [
        'ResourceGroup',
        'ResourceItem'],
    stores: [
        'ResourceGroups',
        'ResourceItems'],
    views: [
        'ResourceItemsGrid',
        'Debug'],

    onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect: function (model, selected, eOpts) {
        var store = this.getStore("ResourceItems");
        var item = selected[0];

        if (item.get('leaf')) {
            if (this.setFilter(item.get('id'), store)) store.reload();
        }

    },

    setFilter: function (f, s) {
        var fId = parseInt(f, 10);
        console.log(s);
        if (fId !== 0) {
            s.clearFilter();
            s.filter('group_id', fId);
            return true;
        } else {
            return false;
        }
    },

    init: function (application) {
        this.control({
            "#teCalculation_RightSidebar_TabPanel_ResourceGroups": {
                selectionchange: this.onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect
            }
        });
    }

});

誰かが私が間違っていることを理解するのを手伝ってくれるなら、それは大歓迎です。

4

1 に答える 1

1

サイドバー クラスがストアを不必要にリロードしていて、おそらく問題が発生していました。これを修正するためのさまざまな修正が含まれている次のコードを試してください。

Ext.define('Exxica.controller.CalculationSidebar', {
    extend: 'Ext.app.Controller',

    models: [
        'ResourceGroup',
        'ResourceItem'],
    stores: [
        'ResourceGroups',
        'ResourceItems'],
    views: [
        'ResourceItemsGrid',
        'Debug'],

    loaded: false,

    onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect: function (model, selected, eOpts) {
        var store = this.getStore("ResourceItems");
        var item = selected[0];

        if(!this.loaded)
        {
            store.load();
            this.loaded = true;
        }

        if (item.get('leaf')) {
            this.setFilter(item.get('id'), store);
        }
        else
        {
            this.setFilter(-1, store);
        }
    },

    setFilter: function (f, s) {
        var fId = parseInt(f, 10);
        console.log(s);
        if (fId !== 0) {
            s.clearFilter();
            s.filter('group_id', fId);
            return true;
        } else {
            return false;
        }
    },

    init: function (application) {
        this.control({
            "#teCalculation_RightSidebar_TabPanel_ResourceGroups": {
                selectionchange: this.onTeCalculation_RightSidebar_TabPanel_ResourceGroupsSelect
            }
        });
    }

});
于 2013-09-11T14:36:09.850 に答える