【发布时间】:2021-03-23 04:36:35
【问题描述】:
我已经阅读了各种关于在 Dexie 查询中组合 and 和 or 语句的帖子和示例,但我仍然感到困惑。
我的tasks 查询首先根据应用的 UI 状态过滤掉某些属性。例如,我想按项目查看任务,以及它们是完成还是删除。这些条件都是在我的数据库初始化的时候索引的。
var where = null
switch(selectedProject){
case 'inbox':
where = { project: '', completed: filterCompleted, deleted: 0 }
break
case 'my-tasks':
where = { assignee: sessionStorage.userId, completed: filterCompleted, deleted: 0 }
break
default:
where = { project: selectedProject, completed: filterCompleted, deleted: 0 }
}
//Ready to go...
tasks = await db.tasks.where(where).sortBy('order')
除了这些查看不同任务状态的方法外,我还有一个文本搜索字段,用于过滤列表中的剩余任务。如果我省略上述条件 where 条件,我可以使用以下 很好地工作:
//searchText is the user's input text in the search field
let searchTerms = searchText.split(' ')
tasks = await db.tasks
.where('name').anyOfIgnoreCase(searchTerms)
.or('name').startsWithIgnoreCase(searchText)
.or('notesPlain').anyOfIgnoreCase(searchTerms)
.sortBy('order')
我苦苦挣扎的地方是如何结合初始 UI 状态的 where 子句和上述文本搜索。我已经尝试将其附加到上面的代码中,但它不起作用:
...
.sortBy('order')
.filter(function(task){
return task.project == selectedProject && task.completed == filterCompleted && task.deleted == 0
})
关于如何解决这个问题的任何想法?
【问题讨论】:
标签: javascript full-text-search dexie dexiejs