我正在为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
}
});
答案 0 :(得分:0)
您使用的是2.0p3吗?在MultiObjectPicker中未正确触发事件存在已知问题。这应该在2.0p4中解决。我在2.0p4应用程序中运行了您的代码,它按预期运行。
作为旁注,您的子项目查询也可以这样写:
filters: [
{ property: 'Parent', value: '/project/' + selected.ObjectID }
]
该组件的2.0p4版本还添加了一个名为selectionchange的新事件,它为您提供了当前所选值的数组(因为它是一个多选选择器)。选择/取消选择特定项目时会激活单独的选择和取消选择事件。
答案 1 :(得分: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
}
});