2014-10-06 27 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

相關問題