在我的项目中,我希望通过dgrid中的名称和电子邮件找到。截至目前,我只能按姓名搜索。我使用了以下内容:
dgrid.set("query", {name: new RegExp(searchKeyword, 'i')});
如何修改此内容,以便我可以同时搜索名称和电子邮件?
答案 0 :(得分:1)
您尝试在单个文本框中输入两个参数,并希望根据该搜索结果进行搜索。这取决于你,你如何创造逻辑,我尝试了一些希望,这将有助于你。
我对你的代码进行了一些修改,所以我只是解释了我的所作所为。在这里,我用逗号分隔两个搜索值。
var keywordArr = searchKeyword.split(','); // separate search values by comma
var len = keywordArr.length;
var query = {}; // search object
if(len>1){ // check whether there is two value or single
query.name = keywordArr[0];
if(validateEmail(keywordArr[1])){
query.email = keywordArr[1];
}
} else { // if single value then
if(validateEmail(searchKeyword)){ // check whether is it email or not
query.email = searchKeyword;
} else {
query.name = new RegExp(searchKeyword, 'i');
}
}
dgrid.set("query", query); // search query
// function to validate email id
function validateEmail(email) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
您可以在jsFiddle上试用我的代码。 谢谢
答案 1 :(得分:1)
dojo/store/Memory
(称为dojo/store/util/SimpleQueryEngine
)后面的查询引擎不支持 OR 操作,这意味着它无法查询所有记录:
name matches searchterm OR email matches searchterm
要解决该问题,您必须使用与默认查询引擎不同的查询引擎。目前Dojo中没有其他可用的查询引擎,但有一个称为资源查询语言的独立项目。您应该在this answer上查看Github和图书馆本身。