kendo ui grid row filterable不会过滤复杂对象

时间:2016-12-10 05:51:49

标签: jquery kendo-ui kendo-grid

我试图对过滤器中的一个复杂物体的中间过滤器进行过滤 两个属性{Id:0,名称:"选择MID" }

现在,当我在过滤器输入中键入一些值时,我会使用这个例子

VM1033:3未捕获的TypeError:(d.Mid ||"")。toLowerCase不是函数

我认为这是因为Mid是一个对象,而不是一个预防类型

任何想法?

谢谢你

这是我的网格:

$("#grid_1").kendoGrid({
    dataSource: {
        dataType: "d",
        transport: {
            read:  {
                url: crudServiceBaseUrl + "/Read",

            },
            update: {
                url: crudServiceBaseUrl + "/Update",
                type: "post",
                contentType: "application/json; charset=utf-8",
                complete: function (e) {

                    jQuery("#load_balancer_grid").data("kendoGrid").dataSource.read();

                }
            },
            create: {
                url: crudServiceBaseUrl + "/Create",
                type: "post",
                contentType: "application/json; charset=utf-8",
                complete: function (e) {

                    jQuery("#load_balancer_grid").data("kendoGrid").dataSource.read();

                }
            },
            destroy: {
                url: crudServiceBaseUrl + "/Delete",
                dataType: "d"
            },
            parameterMap: function (options, operation) {

            }

        },

        batch: true,
        pageSize: 100,
        schema: {
            model: {
                id: "MidGroupId",
                fields: {
                    MidGroupId: { validation: { required: true }, editable: true, type: "number" },
                    Mid: { validation: { required: true }, editable: true, defaultValue: { Id: 0, Name: "Select MID" } },

                    RouteSales: {
                        type: "boolean",
                        parse: function (value) {
                            if (value != null) {
                                return value || false;
                            }
                            return value;
                        },
                        nullable: true
                    },
                    RouteRebills: { type: "boolean" },
                    QueueRebills: { type: "boolean" },
                  //  ResetCounters: { type: "boolean" },

                }
            }
        }
    },
    sortable: true,
    batch: true,

    groupable: true,
    pageable: {
        refresh: true,
        pageSizes: true,
        buttonCount: 5
    },

        filterable: {
                    mode: "row"
                },
    toolbar: kendo.template($("#template").html()),

    edit: function(e) {
        if (e.model.isNew() == false) {

            $(e.container.find("input[name=MidGroupId]")).attr('disabled', 'disabled');
            $(e.container.find("input[name=Mid]")).attr('disabled', 'disabled');
            $(e.container.find("input[name=CardType]")).attr('disabled', 'disabled');
        }
    },
    columns: [
       {
           field: "MidGroupId", type: "number"
       },
              {
                  field: "Mid", editor: MidDropDownEditor, template: "#=Mid.Name#", title: "MID",
                  filterable: {
                      cell: {
                          dataSource: {
                              type: "d",
                              transport: {
                                  read: crudServiceBaseUrl + "/GetMidsOptions"
                              }
                          }
                           ,
                          dataValueField: "Id",
                          dataTextField: "Name"
                      }
                  }

              }


    ],
    editable: true
});

我试图过滤一个物体

2 个答案:

答案 0 :(得分:0)

dataSource API,dataSource上没有dataType属性,因此下面部分不正确,因此这可能是您的错误原因:

dataSource: {
    dataType: "d",

dataType可以在dataSource传输的传输CRUD中更深入地定义,就像你已经拥有它一样。我没有尝试将复杂的对象放到网格列,为什么不在服务器上执行?在服务器上创建一个原始属性并在网格中轻松使用它是最自然的。

答案 1 :(得分:0)

我也遇到了这个问题。解决方案是在更改处理程序触发时更新编辑器中的 model.dirtyFilds。它看起来像:

function MidDropDownEditor(container, options){
$(`<input id="MidEditor" name="Mid" data-bind="value:Mid" />`)
        .appendTo(container)
        .kendoDropDownList({
            autoBind: false,
            filter: "startswith",
            dataTextField: "Name",
            dataValueField: "Id",            
            enable: false,
            change: function(){
                if (options.model.dirtyFields['Mid']) {
                    options.model.dirtyFields['Mid.Name'] = true;
                }
            }
});

在列设置中,您应该设置属性“字段”,例如“Mid.Name”。

它对我有用。