我需要使用过滤功能来实现用于选择记录的启发式算法。单独进行简单的现场/价值检查不足以达到我们的目的。
我试图按照功能过滤器的示例进行操作,但出于某种原因," allowFunctions" flag一直设置为false。
我尝试在storeConfig中将 allowFunctions 属性设置为true:
storeConfig: {
models: ['userstory', 'defect'],
allowFunctions: true,
filters: [{
// This did not work ...
property: 'Iteration.Name',
value: 'Sprint 3',
// Trying dynamic Filter Function. Update: Never called.
filterFn: function (item) {
console.log("Entered Filter Function!");
var iter = item.get("Iteration");
console.log("Iteration field: ", iter);
if (iter !== null && iter !== undefined) {
return (iter.name === "Sprint 3");
} else {
return false;
}
}
}]
},
网格视图渲染后,我会检查商店配置及其过滤器:
listeners: {
afterrender: {
fn: function (_myVar, eOpts) {
console.log("Arg to afterrender: ", _myVar, " and ", eOpts);
var _myStore = _myVar.getStore();
console.log("Store filters: ", _myStore.filters);
}
}
},
我发现allowFunctions属性已设置为false,我看到我指定的过滤器函数从未触发过。
所以要么我在错误的地方将allowFunctions设置为true,要么在Rally Grid View中内置了一些东西,而且它的数据存储禁止过滤器功能并将标志翻转为假。
或者第三种选择背叛了我的运作理论是多么糟糕。
哦,明智的退伍军人,请指教。
这是整个Apps.js文件:
Ext.define('CustomApp', {
extend: 'Rally.app.App',
componentCls: 'app',
launch: function () {
//Write app code here
console.log("Overall App Launch function entered");
//API Docs: https://help.rallydev.com/apps/2.1/doc/
}
});
Rally.onReady(function () {
Ext.define('BOA.AdoptedWork.MultiArtifactGrid', {
extend: 'Rally.app.App',
componentCls: 'app',
launch: function () {
console.log("onReady Launch function entered");
this.theGrid = {
xtype: 'rallygrid',
showPagingToolbar: true,
showRowActionsColumn: false,
editable: false,
columnCfgs: [
'FormattedID',
'Name',
'ScheduleState',
'Iteration',
'Release',
'PlanEstimate',
'TaskEstimateTotal',
'TaskActualTotal', // For some reason this does not display ?? :o( ??
'TaskRemainingTotal'
],
listeners: {
afterrender: {
fn: function (_myVar, eOpts) {
console.log("Arg to afterrender: ", _myVar, " and ", eOpts);
var _myStore = _myVar.getStore();
console.log("Store filters: ", _myStore.filters);
}
}
},
storeConfig: {
models: ['userstory', 'defect'],
allowFunctions: true,
filters: [{
// This did not work ...
property: 'Iteration.Name',
value: 'Sprint 3',
// Trying dynamic Filter Function. Update: Never called.
filterFn: function (item) {
console.log("Entered Filter Function!");
var iter = item.get("Iteration");
console.log("Iteration field: ", iter);
if (iter !== null && iter !== undefined) {
return (iter.name === "Sprint 3");
} else {
return false;
}
}
}]
},
context: this.getContext(),
scope: this
};
this.add(this.theGrid);
console.log("The Grid Object: ", this.theGrid);
}
});
Rally.launchApp('BOA.AdoptedWork.MultiArtifactGrid', {
name: 'Multi-type Grid'
});
});
答案 0 :(得分:1)
这是一个棘手的问题,因为您仍然希望应用服务器过滤器,然后您希望在客户端进一步过滤数据。
在这里查看此示例: https://github.com/RallyCommunity/CustomChart/blob/master/Settings.js#L98
我认为你基本上可以为你的商店添加一个加载监听器,然后在那个处理程序中你可以做一个filterBy来进一步过滤你在客户端的结果。
listeners: {
load: function(store) {
store.filterBy(function(record) {
//return true to include record in store data
});
}
}
我不熟悉allowFunctions,但通常remoteFilter:true / false控制过滤是在服务器端还是客户端。 remoteFilter:true +上面的加载处理程序为您提供两全其美的优势。