我一直在为一个项目使用Angular,最近在http://kendo-labs.github.io/angular-kendo/#/上发现了Kendo-Angular项目。我成功地将Angular-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]
}]
});使用Angular,人们可能会做这样的事情:
<input ng-model="data[0].data[0]" />输入字段中的输出将是10。但是,当将此数据传递给图形并尝试更改输入框中的值时,图形不会更新。
有使用这些库的经验的人知道如何实现这样的东西吗?这种支持真的存在吗?这仅仅是一个让Kendo与Angular协同工作的库吗?
发布于 2014-01-10 06:08:55
我解决了这个问题,但现在以我所期望的方式。
我只是将一个更改事件绑定到输入,并调用了Kendo redraw()方法,每次我的模型更新时它都会重新绘制。考虑到在Kendo有一个完整的努力,这有点烦人。你可能会认为双向绑定是可用的。
如果有的话,我还在寻找更好的答案。
发布于 2014-01-11 05:09:37
请注意,angular-kendo的作者和/或对AngularJS有更深入了解的人可能会因为我“做错了”而拿石头砸我,但这里是:
angular-kendo已经在数据源上使用了一个$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);那么你所寻找的行为就起作用了。我不确定为什么没有实现这个(好吧,类似的东西,但更好);对我来说,它似乎是一个核心功能,但可能有一些我不理解的原因(我还没有真正阅读这里的所有源代码)。在任何情况下,必须手动将更改事件处理程序附加到输入以更新您的UI对我来说也不是很“贴切”。
咯咯笑的Demo。免责声明:我不对任何事情负责。不要用这个。
编辑:在看了angular-kendo问题跟踪器之后,看起来他们打算做一些类似的事情(从comment by @BurkeHolland here判断),所以这可能不是完全错误的;我更新了演示以使其更具可读性
发布于 2014-04-11 03:14:22
我对这个解决方案并不着迷,但我认为这是目前最好的绑定方式。解决方案是使用kendo.data.ObservableArray或kendo.data.DataSource来支持数据网格,然后更新控制器中的ObservableArray或DataSource:
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>https://stackoverflow.com/questions/21031735
复制相似问题