2014-10-06 26 views
1

我正在使用kendo MultiSelect进行odata分页并使用angularJS集成。从头开始填充数据效果很好。当我想从初始数据重新填充数据时,我似乎遇到了问题。Kendo multiselect使用odata与分页填充先前选定的项目。 (AngularJS)

问题原因: 数据只会从初始数据集或先前数据集中填充。所以,如果我的分页大小是10,那么只有第一页中存在的产品才会正常显示。所有不属于第一页的产品将不会显示。

可能的解决方法:

  1. 增加页面大小。我在其他结果非常小的页面上使用了这个功能。然而,这不是一个现实的工作,因为我们预计未来会有更大的数据集(因此首先使用odata)
  2. 正在考虑我们可能会做某种初始排序。但是,如果选择的项目多于第一页中存在的项目,这也可能会很慢并且仍然可能会出现问题。

的理想解决方案

有没有办法告诉剑道组件来加载基于当前值的所有数据?这将构建所需的odata调用并填充组件。本期的

例子: http://dojo.telerik.com/ODaLe/2

回答

2

我工作了2-4个小时,为此寻找解决方案。不知道亚尔是否会喜欢它,但它可能会帮助别人,所以我会在这里输入。下面是步骤:

步骤1:创建数据源

首先,设置在的dataSource对象您将使用用于读取远程数据(离线数据,通过读出API即兴) 。

var dataSource = new kendo.data.DataSource({ 
    dataType: "jsonp", 
    transport: { 
    read: { 
     url: options.source, 
     type: 'POST' 
    }, 
    }, 
    serverFiltering: true 
}); 

第2步:加载所选项目

,因为你需要对客户端所选择的项目ID这可能会非常棘手。对于我来说,我是通过添加一个数据选项选择=“1; 3; 9”属性给我的选择元素。后来,在我的JavaScript中,我用“;”分隔了这个属性。并检索所选ID的数组。可以说这些值在var valuesArray;

一旦我们有一个选定的ID数组,我们需要从数据源读取它们。在我的情况下,它是远程的,所以我跑dataSource.read()使用过滤器如下:

dataSource.read({ 
     filter: { 
      logic: 'and', 
      filters: [ 
       { 
        field: options.dataValueField, 
        operator: 'equals', 
        value: options.value 
       } 
      ] 
     } 
}); 

在服务器端,这应该返回包含具有给定标识符的物品的阵列。因此,我们现在在客户端也有这些项目。

步骤3:为小部件

设置值现在的值相关的数据被加载时,就可以对小部件使用值()方法设置的值。这里,$ el是jQuery对象,表示我正在使用的select元素,用于multiSelect

var oWidget = $el.data('kendoMultiSelect'); oWidget.value(valuesArray);

就是这样!一个多选小部件预先加载了值,可以随时摇滚。服务我的目的。不知道是否存在任何捷径。

2

使用时与剑道角度,你要使用的K-重新绑定属性刷新下拉选项+更新的值选择器在$ scope.countries对象当它改变时。

如果您希望在$ scope.products更改时更新选择器,您可以使用指向控制器中对象的k选项attr初始化选择器,并将k-rebind设置为该对象。

这个剑道教程提供了一个有用的例子,也使用odata分页。 http://docs.telerik.com/kendo-ui/web/multiselect/how-to/AngularJS/pre-select-items

相关问题