剑道网格 :对数组对象进行过滤
kendo grid : filtering on an array object
我想过滤一个剑道网格,它的模型有对象列表。
我的筛选器不适用于联系人列表:
这是我的javascript代码:
var typeFilter;
var contactsFilter;
var datesFilter;
var ByFiler;
var zeroFilter = {
field: "ID",
operator: "eq",
value: 0
};
function filterOnMultiSelectContacts(e) {
var filters;
for (var i = 0; i < $('#ContactsDropDownFilter').data("kendoMultiSelect").dataItems().length; i++)
{
filters =[
{
field: "Contacts.ContactID",
operator: "eq",
value: Number($('#ContactsDropDownFilter').data("kendoMultiSelect").dataItems()[i].ContactID)
},
zeroFilter
]
}
contactsFilter = {
logic: "or",
filters: filters
};
applyFilters();
}
function TypeChanged(e) {
var type = $("#SelectedType").val();
var value = Number(type);
if (value === -1) {
typeFilter = null;
}
else {
typeFilter = {
logic: "or",
filters: [
{
field: "Type",
operator: "eq",
value: value
},
zeroFilter
]
};
}
applyFilters();
}
function applyFilters() {
var ds = $("#Grid").data("kendoGrid").dataSource;
var filters = [];
if (typeFilter) filters.push(typeFilter);
if (contactsFilter) filters.push(contactsFilter);
if (datesFilter) filters.push(datesFilter);
ds.filter(filters);
}
我的日期和我的类型的过滤器工作正常,因为字段(模型)不是数组。另一方面,我的filterOnMultiSelectContacts()
功能无法正常工作。我猜我的错误是这条线field: "Contacts.ContactID"
.此行通过添加正确的联系人 ID 工作正常:
Number($('#ContactsDropDownFilter').data("kendoMultiSelect").dataItems()[i].ContactID)
顺便说一下,这是我网格的剃刀数据源:
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Events(e => e.Sync("SyncLogEventGrid"))
.Model(m =>
{
m.Id(t => t.LogEventID);
m.Field(u => u.CreatedByContact).DefaultValue(UserHelper.GetCurrentUserContact(Request.RequestContext));
m.Field(u => u.CreatedBy).DefaultValue(UserHelper.GetCurrentUserContact(Request.RequestContext).ContactID);
m.Field(u => u.Contacts).DefaultValue(new List<ContactModel>());
m.Field(u => u.LogEventAttachments).DefaultValue(new List<LogEventAttachmentModel>());
})
)
编辑
我在我的模型中添加了ContactIds,其中包含联系人的Id(而不是整个对象)。我想出了这个,但它仍然不起作用...
function filterOnMultiSelectContacts(e) {
contactsFilter = null;
var ContactIdsList = new Array();
for (var i = 0; i < $('#LogEventContactsDropDownFilter').val().length; i++)
{
ContactIdsList.push(Number($('#LogEventContactsDropDownFilter').val()[i]));
}
var filters;
if ($('#LogEventContactsDropDownFilter').data("kendoMultiSelect").dataItems().length > 0) {
filters = [
{
field: "ContactIDs",
operator: "eq",
value: ContactIdsList
}
,
zeroFilter
];
contactsFilter = {
logic: "or",
filters: filters
};
}
else
{
contactsFilter = null;
}
applyFilters();
}
我终于让它工作了,这是解决方案:
MyFunctions = {
getIntersect: function (arr1, arr2) {
var intersect = [];
for (i = 0; i < arr2.length; i++) {
if ($.inArray(arr2[i], arr1) > -1)
intersect.push(arr2[i]);
}
return intersect;
}
}
function filterOnMultiSelectContacts(e) {
filterBtnClicked(e, $(this));
contactsFilter = null;
var filters;
if ($('#LogEventContactsDropDownFilter').data("kendoMultiSelect").dataItems().length > 0)
{
var ContactIdsList = new Array();
for (var i = 0; i < $('#LogEventContactsDropDownFilter').val().length; i++) {
ContactIdsList.push(Number($('#LogEventContactsDropDownFilter').val()[i]));
}
filters = [
{
field: "ContactIDs",
operator: function (items, filterValue) {
var intersect = MyFunctions.getIntersect(items, ContactIdsList);
if (intersect.length > 0) return true;
return false;
},
value: ContactIdsList
}
,
zeroFilter
];
contactsFilter = {
logic: "or",
filters: filters
};
}
else
{
contactsFilter = null;
}
applyFilters();
}
function applyFilters() {
var ds = $("#Grid").data("kendoGrid").dataSource;
var filters = [];
if (typeFilter) filters.push(typeFilter);
if (contactsFilter) filters.push(contactsFilter);
if (datesFilter) filters.push(datesFilter);
ds.filter(filters);
}
我需要创建一个函数,将给定数组与网格数据源的项目相交。
相关文章:
- Angular:使用选择列表选择过滤代码中的对象
- 如何使用javascript过滤复杂的json对象
- 使用jquery grep过滤具有值数组的json对象
- 执行过滤对象数组的方法
- 按值名称过滤掉重复的对象,并将其放入新数组中
- 如何按数组/对象值的倍数过滤对象数组
- 访问KendoUI中Datasource过滤对象的字段
- 通过 nodejs 过滤对象数组
- 根据复选框输入过滤深层对象
- 如何过滤对象内部深度堆叠的数据(并在之后编辑删除它)
- 使用Angular js ng repeat指令过滤json对象
- 过滤父对象时,输入将丢失其值
- AngularJS ng-repeat对象,按对象过滤
- 嵌套对象过滤 - 角度
- AngularJS 过滤器:将具有唯一 ID 的对象过滤到单独的对象中
- 使用 angularjs 中的特殊 $ 字符按对象过滤不起作用
- 列表理解,如JavaScript中的对象过滤
- 用javascript对象过滤json
- 谷歌地图-基于JavaScript对象过滤结果
- 用javascript中的另一个对象过滤对象