Kendo DataSource,AngularJS - 未定义的属性

时间:2014-06-12 14:02:21

标签: angularjs kendo-ui kendo-datasource kendo-observable

我想用网络服务返回的复杂json填充网格。我的json包含两件事:

  • data:包含将填充网格的记录的数组
  • columns:包含网格配置(布局)的数组

通过指定schema.data,我已成功使用“数据”填充网格。

我的问题是网格配置(布局)。我在数据源的requestEnd事件上获取了columns数组,并将其添加到customersSource(数据源),以便我可以在gridOptions中访问它。

问题在于,即使我记录customersSource对象时,我看到我添加的cols数组,并且填充了正确的数据,$scope.mainGridOptions.columns未设置为{{ 1}}。

我认为这可能与customersSource.cols异步设置但不应该用它的数据绑定处理这个事实有关吗?

我也在Data source vs. Angular读到我可能需要设置Observable,但我对于该怎么做感到困惑。

我该如何解决这个问题?

这是我的代码:

customersSource.cols

这是我的JSON

var customersSource = new kendo.data.DataSource({
        transport: {
            read: {
                url: "http://....",
                dataType: "json"
            }
        },
        schema: {
            data: "data"
        },
        requestEnd: function (e) {
            this.cols = e.response.columns;
        }
    });

$scope.mainGridOptions = {
        dataSource: customersSource, // OK
        columns: customersDataSource.cols, // undefined - uses default
        height: 500,
        scrollable: true,
        selectable: true
    };

修改 我创建了一个测试项目的插件。正如你所看到的,我可以填充网格,但我对mainGridOptions.columns有问题。任何帮助都感激不尽! http://plnkr.co/edit/5pjFQGkgTivqVkxsFBse

1 个答案:

答案 0 :(得分:0)

这是因为angularjs不知道第三方所做的更改而你错过了神奇的双向数据绑定。虽然我认为承诺在你的情况下会很好用

requestEnd: function (e) {
  $scope.$apply(function(){
    $scope.mainGridOptions.columns = e.response.columns
  })
}