2014-01-09 163 views
2

我一直在使用Angular作爲項目,並且剛剛在http://kendo-labs.github.io/angular-kendo/#/上發現了Kendo-Angular項目。我成功地將Angular-Kendo添加到了我的項目中,並且它的工作方式與我之前所認爲的更新模型的例外情況類似。更改角度模型以更新Kendo

該項目正是我正在尋找的,但是,文檔中沒有任何示例顯示您可以更新Angular模型,因此它更新了Kendo數據源。

這裏是例如一段代碼:

$scope.data = new kendo.data.DataSource({ 
    data: [{ 
     name: "India", 
     data: [10, 7.943, 7.848, 9.284, 9.263, 9.801, 3.890, 8.238, 9.552, 6.855] 
    }, { 
     name: "World", 
     data: [1.988, 2.733, 3.994, 3.464, 4.001, 3.939, 1.333, 2.245, 4.339, 2.727] 
    }, { 
     name: "Russian Federation", 
     data: [4.743, 7.295, 7.175, 6.376, 8.153, 8.535, 5.247, 7.832, 4.3, 4.3] 
    }, { 
     name: "Haiti", 
     data: [0.253, 0.362, 3.519, 1.799, 2.252, 3.343, 0.843, 2.877, 5.416, 5.590] 
    }] 
}); 

具有角,可以預期,使這樣的事情:

<input ng-model="data[0].data[0]" /> 

在輸入字段的輸出是10。但是,將此數據傳遞給圖並嘗試更改輸入框中的值時,圖不會更新。

任何有這些特定圖書館經驗的人都知道如何實現類似的東西?這種支持是否存在?這只是一個圖書館,使劍道與Angular一起工作,僅此而已?

回答

2

我解決了這個問題,但現在以我期待的方式。

我只是將一個變化事件綁定到輸入上,並調用Kendo redraw()方法,並在每次更新模型時重繪。考慮到在劍道這一切都有一個全面的努力有點惱人。你會認爲2路綁定可用。

如果有的話還在尋找更好的答案。

+0

你是否採用了棱角分明的劍道UI? – victormejia

+0

@victorczm是的。 – Sethen

+1

如果你有一個演示或代碼示例,你會做些什麼 – Alex

2

注意,角劍道和/或人的作者(S)與AngularJS的更深入的瞭解可能會用石頭砸我的「做錯了」,但在這裏有雲:

角劍道已經使用數據源上$watch,所以如果你添加一些代碼什麼它最初是在那裏做,比如像這樣:

scope.$watch(attrs.kDataSource, function (mew, old) { 
    if (mew !== old) { 
     element.data('$kendoDataSource', toDataSource(mew, type)); 

     var role = element.data("role"); 
     var widgetType = role.charAt(0).toUpperCase() + role.slice(1); 
     var w = element.data("kendo" + widgetType);; 

     if (!w) { 
      w = kendo.widgetInstance(element, kendo.ui); 
     } 

     if (w && typeof w.setDataSource === "function") { 
      w.setDataSource(element.data('$kendoDataSource')); 
     } 
    } 
}, true); 

則行爲你要找的作品。我不知道爲什麼這個(好吧,類似的東西,但更好)沒有實施;對我來說,這似乎是一個核心功能,但可能有一些原因我不明白(我沒有真正閱讀過所有的源代碼)。在任何情況下,不得不手動將更改事件處理程序附加到輸入以更新您的用戶界面,這對我來說似乎也不是很「尖銳」。

Demo爲咯咯。免責聲明:我不負責任何事情。不要使用這個。

編輯:在看了角度劍道問題跟蹤器後,看起來他們打算做類似的事情(從comment by @BurkeHolland here來判斷),所以也許這並非完全錯誤;我更新了演示,使其更具可讀性

1

我對這個解決方案並不滿意,但我認爲這是做這個綁定的最好方法。解決方案是使用kendo.data.ObservableArray或kendo.data。數據源備份數據網格,然後更新ObservableArray或數據源中的控制器:

angular.module('MyApp').controller('MyController', function($scope, $http) { 
    $scope.products = new kendo.data.DataSource({ 
     data: [],   // kendo watches this array 
     pageSize: 5 
    }); 

    $http.get('data/products.json').then(function(result) { 
     // update the Kendo DataSource here. 
     $scope.products.data(result.data); 
    }); 
}); 

的HTML看起來像這樣:

<div kendo-grid 
    k-data-source="products" 
    k-selectable="'row'" 
    k-columns='[{ "field": "ProductName",   "title": "Name" }, 
       { "field": "Supplier.SupplierName", "title": "Supplier" }, 
       { "field": "Category.CategoryName", "title": "Category" }]' 
    k-sortable="true" 
    k-groupable="true" 
    k-filterable="true"> 
</div> 
+1

你應該如何從網格中獲取所有的分頁,排序等參數? – KingOfHypocrites