我是jayData的新手,我正在尝试过滤实体集。过滤器需要执行超出我在样本中看到的复杂评估。
以下是我要完成的工作示例(listView行不是,只是为了显示我打算对数据做什么):
function () {
var weekday = moment().isoWeekday()-1;
console.log(weekday);
var de = leagueDB.DailyEvents.toArray(function (events) {
console.log(events);
var filtered = [];
for (var e = 0; e < events.length;e++) {
console.log(events[e]);
console.log(events[e].RecurrenceRule);
var rule = RRule.fromString(events[e].RecurrenceRule);
var ruleOptions = rule.options.byweekday;
var isDay = ruleOptions.indexOf(weekday);
console.log(ruleOptions, isDay);
if(isDay =! -1)
{
filtered.push(events[e]);
}
}
$("#listView").kendoListView({dataSource:filtered});
});
基本上它只是评估一个重复的规则字符串,以查看当前日期是否符合该条件,如果是,则将该事件添加到列表中以供查看。
但是当我尝试这样做时它会爆炸:
eventListLocal:leagueDB.DailyEvents.filter(function(e){
console.log("The Weekday is:"+viewModel.weekday);
console.log(e);
console.log("The recurrence rule is:"+e.RecurrenceRule);
var rruleOptions = viewModel.rruleOptions(e.RecurrenceRule);
if (rruleOptions !== -1) {
return true;
}
}).asKendoDataSource()
产生的错误是: 例外:无法解析类型:未定义
事情是它似乎发生在“e”和控制台日志之类的事件没有被传入。但是,我也没有看到列表。简而言之,我对发生的事情感到困惑。
任何帮助将不胜感激。 谢谢,
答案 0 :(得分:0)
你不能写这样的过滤表达式。
当您编写.filter(...)时,jaydata将解析您的表达式,然后它将为底层提供程序生成过滤器,例如webSql和oDataProvider的$ filter。
JayData表达式解析器和数据提供者本身都应该理解你的过滤器。
您的过滤器不适合此方法,因为您的大多数代码都不熟悉jaydata表达式解析器和基础数据提供程序,例如您的console.log等。
您可以简化过滤器,或者您应该将所有数据加载到数组中,然后您可以使用数组本身的过滤方法,在那里,您可以编写您喜欢的任何过滤器,并且您的过滤器将起作用。当然,在您的数据集较大的某些情况下,这会出现性能问题。
详细了解http://jaydata.org/tutorials/entityexpressions-the-heart-of-jaydata