编辑 - 找到答案
我意识到为什么它不起作用。我正在阅读的“过滤器”配置字段基于 Ext.data.AbstractStore 类的配置,而不是 Rally 的 Rally.data.wsapi.Store 配置。Rally 不支持过滤器“函数”,因为所有 Rally.data.wsapi.Store 过滤器都变成了 wsapi 查询语法(我在 SDK 指南中读到了),而您无法使用函数执行此操作。这就是为什么他们只接受 Object[] 参数,而不是 Function[] 参数。
因此,如果我错了,请纠正我,但我认为 wsapi 商店的文档对于“过滤器”配置字段是错误的。
我正在尝试使用自定义过滤器功能从用户故事列表中加载功能。我的问题是了解过滤器功能如何为商店配置工作。现在我有:
_loadFeatures: function(cb){
var me = this;
Ext.create('Rally.data.wsapi.Store',{
model: 'PortfolioItem/Feature',
autoLoad:true,
start: 0,
pageSize: 20,
fetch: //stuff
context: //stuff
filters:[
function(feature){ return false; },
function(feature){
return feature.get('Release').Name == me.releaseRecord.get('Name');
},
function(feature){
var oid = feature.get('ObjectID');
var rs = me.StoryStore.getRecords();
for(var i = 0;i<rs.length;++i){
var r = rs[i];
if(r.get('Feature') && r.get('Feature').ObjectID == oid)
return true;
}
return false;
}
],
listeners: //stuff
});
},
有几件事让我感到困惑:
1) 我的一个函数无论如何都返回 false,我认为它应该返回 NO 结果。然而,商店返回所有功能,就像根本没有过滤器一样(它返回结果的第一页,但页面包含所有功能)
2)我们可以将过滤函数中的参数作为'records'或records'数据,类似于record.data。我的意思是我应该使用record.get('ObjectID') 还是record.ObjectID。
3)我什至可以使用上面的第三个过滤器功能,因为它需要作用域变量,并且过滤是在服务器端完成的。范围变量是否保留?
我不知道这些问题的答案,因为我无法将控制台日志放入过滤器功能中,因为它们是经过过滤的服务器端。