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 的新事件,它为您提供当前选定值的数组(因为它是一个多选选择器)。There are individual select and deselect events that fire when a specific item is selected/deselected.

于 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 回答