2

Rallyカスタムアプリのプロジェクトピッカーを実装しています。ピッカーから親が選択されたときに、プロジェクトの子を自動的に選択したいと思います。選択したいオブジェクトのObjectIDとNameを取得できましたが、ピッカーから選択できるように見えません。「fireEvent」メソッドを使用してこれを試みましたが、成功しませんでした。これが私がこれまでに持っているものです:

var teamPick = this.down('#filterPanel').add({
    xtype: 'rallymultiobjectpicker',
    id: 'teams',
    modelType: 'project',
    fieldLabel: 'Teams',
    listeners: {
        select: function(field, selected) {
            Ext.create('Rally.data.WsapiDataStore', {
                autoLoad: true,
                fetch: [ 'Name', 'ObjectID' ],
                filters: [
                    { property: 'Parent.ObjectID', value: selected.ObjectID }
                ],
                model: 'Project',
                listeners: {
                    load: function(store, data) {
                        Ext.Array.each(data, function(child) {
                            console.log(child.get('Name')); //Logs the child name
                        });
                    }
                }
            });
        },
        scope: this
    }
});
4

2 に答える 2

0

2.0p3を使用していますか?MultiObjectPickerでイベントが正しく発生しないという既知の問題がありました。これは2.0p4で解決されるはずです。2.0p4アプリでコードを実行しましたが、期待どおりに機能しました。

ちなみに、子プロジェクトのクエリは次のように書くこともできます。

filters: [
    { property: 'Parent', value: '/project/' + selected.ObjectID }
]

コンポーネントの2.0p4バージョンでは、selectionchangeという新しいイベントも追加されました。これは、現在選択されている値の配列を提供します(マルチセレクトピッカーであるため)。特定のアイテムが選択/選択解除されたときに発生する個別の選択および選択解除イベントがあります。

于 2012-10-10T18:14:03.827 に答える
0

fireEventメソッドを使用せずにこれを達成することができました。代わりに、getValueメソッドとsetValueメソッドを使用して、子プロジェクトを手動で状態に追加しました。

    this.down('#filters').add({
        xtype: 'rallymultiobjectpicker',
        id: 'teams',
        modelType: 'project',
        listeners: {
            blur: function() { this.down('#teams').collapse(); },
            select: function(field, selected) {
                Ext.create('Rally.data.WsapiDataStore', {
                    autoLoad: true,
                    fetch: [ 'Name', 'ObjectID' ],
                    filters: [
                        { property: 'Parent.ObjectID', value: selected.ObjectID }
                    ],
                    model: 'Project',
                    listeners: {
                        load: function(store, data) {
                            var selected = this.down('#teams').getValue();
                            Ext.Array.each(data, function(child) {
                                selected.push(child.data);
                            });
                            this.down('#teams').setValue(selected);
                        },
                        scope: this
                    }
                });
            }
            scope:    this
        }
    });
于 2012-11-06T17:45:59.293 に答える