代码之家  ›  专栏  ›  技术社区  ›  Yanayaya

有没有其他方法来设置剑道虚拟化mutliselect小部件的初始值?

  •  0
  • Yanayaya  · 技术社区  · 6 年前

    我有一个剑道多选小部件,它绑定了大量的数据,为了处理这个问题,我将小部件虚拟化,并将压力施加到服务器上。

    我试图通过一个传递id数组的javascript函数来选择一些初始数据。它工作得很好 只有 所选择的数据在小部件的第一个分页结果集中,如果任何ID在后面,那么它们就不会被选择,我需要修复它。

    @(Html.Kendo().MultiSelect()
    .Name("Cars")
    .DataTextField("Name")
    .DataValueField("Id")
    .Placeholder("Select cars...")
    .Filter(FilterType.Contains)
    .DataSource(source => { source
        .Custom()
        .ServerFiltering(true)
        .Events(e => e.Error("errorHandler"))
        .ServerPaging(true)
        .PageSize(80)
        .Type("aspnetmvc-ajax")
        .Transport(transport => {
            transport.Read("GetData", "Positions");
        })
        .Schema(schema => { schema
            .Data("Data")
            .Total("Total")
            .Errors("Errors");
        });
    }))
    

    数据是从 GetData

    获取数据

    public JsonResult GetData([DataSourceRequest] DataSourceRequest request)
    {
        var car = unitOfWork.CarRepository.Get().OrderBy(n => n.Name);
        var results = vessel.ToDataSourceResult(request);
        return Json(results);
    }
    

    function initialSelection(filter) {
        //filter is: "6544","4880","6545","6548"
        var carSelection = $("#Cars").data("kendoMultiSelect");    
        var filterArray = filter.split(',').map(Number);
    
        if (filterArray.length > 0) {
            console.log(filterArray)
            carSelection.value(filterArray);
        } else {
            carSelection.value();
        }
    }
    

    有没有比我使用上面的javascript更好的方法来进行数据的初始选择?如我所说,如果id不在返回的结果的第一页上,它们就不会被选中,这是令人沮丧的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   David Shorthose    6 年前

    您只需将read声明更改为以下内容:

     .Transport(transport => {
            transport.Read(read => read.Action("GetData", "Positions").Data("intialvalues"));
        })
    

    然后为 initialvalues 数据对象,如:

    function inititalvalues(){
        var filterArray = filter.split(',').map(Number);
    
    if(filterArray === undefined || filterArray === null || filterArray.length <= 0) 
    {
        filterArray = []
    }
     return {filterValues: filterArray}; 
    }
    

     public JsonResult GetData([DataSourceRequest] DataSourceRequest request, List<int> filterValues)
            {
    
                if (filterValues.Count > 0 && request.Page == 1)
                {
                      ..get the first page  minus how many filterValues you have to inject the selected Items at the top of the list...
    
    
                }
                else if (filterValues.Count > 0 && request.Page > 1)
                {
                     ..get the page you need and remove any selected items from the page as they will be at the top...
                }
                else
                {
                     ..just get everything as normal as nothing should be selected at this stage.
                }
    
                return your paged resultset back...
            }
    

    希望这能给你一个起点。