Javascript 为什么用Typescript编写的自定义读取方法进行Kendo树列表数据源传输会变得疯狂?

Javascript 为什么用Typescript编写的自定义读取方法进行Kendo树列表数据源传输会变得疯狂?,javascript,angularjs,kendo-ui,typescript,kendo-datasource,Javascript,Angularjs,Kendo Ui,Typescript,Kendo Datasource,我正在使用Angular 1.4.9和Typescript,我想显示一个树列表,其中数据来自Restangular调用的服务器。所以,我在Kendo数据源中有一个自定义的传输方法,如下所示 不幸的是,我还没有足够的打字经验 问题: 当加载页面时,Kendo TreeList启动readRepository方法从服务器获取数据,当加载数据或部分数据(我指的是一行)时,它会向服务器发出许多调用,对我来说,当它获取一行数据时,它似乎会使用它,然后不必要地再次调用服务器。我不明白为什么 请查看附件中的

我正在使用Angular 1.4.9和Typescript,我想显示一个树列表,其中数据来自Restangular调用的服务器。所以,我在Kendo数据源中有一个自定义的传输方法,如下所示

不幸的是,我还没有足够的打字经验

问题

当加载页面时,Kendo TreeList启动readRepository方法从服务器获取数据,当加载数据或部分数据(我指的是一行)时,它会向服务器发出许多调用,对我来说,当它获取一行数据时,它似乎会使用它,然后不必要地再次调用服务器。我不明白为什么

请查看附件中的相关代码

我到目前为止所做的事

  • 我创建了同一个用javascript编写的控制器,它工作起来很有魅力
  • 我尝试根据答案更改DataSourceTransport.read调用this.readRepository的方式,但结果是一样的
ShowTestSuiteTreeController以Typescript编写:

module sayusiando.gonogo.web.spa.mainpage.showtestsuittree.controllers {
    import IGeneralTestSuitTestCaseContract = sayusiando.gonogo.web.spa.common.contracts.IGeneralTestSuitTestCaseContract;
    import DataSourceTransport = kendo.data.DataSourceTransport;
    import DataSourceSchema = kendo.data.DataSourceSchema;
    import DataSourceSchemaModelFields = kendo.data.DataSourceSchemaModelFields;
    import TestManagementService = sayusiando.gonogo.web.spa.service.ITestManagementService;
    "use strict";

    export interface IShowTestSuitTreeController {
        activate: () => void;
    }

    class ShowTestSuitTreeController implements IShowTestSuitTreeController {

        //#region Variables
        testSuiteTree = [];
        testSuiteTreeKendoTreeListOptions: kendo.ui.TreeListOptions = {};
        //#endregion

        //#region Inject and ctor
        static $inject: string[] = ['testManagementService'];

        constructor(
            private testManagementService: gonogo.web.spa.service.ITestManagementService
        ) {

            this.activate();

        }
        //#endregion

        activate(): void {

            var dataSourceTransport = <DataSourceTransport>{
                //read: this.readRepository.bind(this)
                read: (e) => this.readRepository(e)
            };

            var schema: DataSourceSchema = <DataSourceSchema>{
                model: {
                    id: "id",
                    parentId: "parentId",
                    fields: <DataSourceSchemaModelFields>{

                        id: { type: "number", editable: false, nullable: true },
                        name: { type: "string", editable: false, nullable: true }

                    }

                }

            };

            var dataSource = new kendo.data.TreeListDataSource({
                transport: dataSourceTransport,
                schema: schema,
                batch: true
            });


            var idColumn: kendo.ui.TreeListColumn = <kendo.ui.TreeListColumn>{
                field: "id",
                width: "100px"
            };
            var nameColumn: kendo.ui.TreeListColumn = <kendo.ui.TreeListColumn>{
                field: "name",
                width: "400px"
            };

            this.testSuiteTreeKendoTreeListOptions.dataSource = dataSource;
            this.testSuiteTreeKendoTreeListOptions.sortable = false;
            this.testSuiteTreeKendoTreeListOptions.editable = false;
            this.testSuiteTreeKendoTreeListOptions.columns = [
                idColumn,
                nameColumn
            ];

        }

        readRepository(e): any {

            this.testManagementService.getTestSuitTree().then((result: Array<IGeneralTestSuitTestCaseContract>): void => {
                e.success(result);
            }, (reason: any): void => {
                e.error(reason);
            });

            console.log('e', e);

            return e;
        }

    }

    angular
        .module("goNoGo")
        .controller("showTestSuitTreeController", ShowTestSuitTreeController);
}
工作正常的javscript控制器:

(函数(){
"严格使用",;
有棱角的
.module('goNoGo')
.controller(“ShowTestSuiteTreeController2”,ShowTestSuiteTreeController2);
ShowTestSuiteTreeController2.$inject=['testManagementService'];
函数ShowTestSuiteTreeController2(testManagementService){
/*这是真的*/
var vm=这个;
激活();
函数激活(){
vm.testSuiteTreeKendoTreeListOptions={
数据源:{
运输:{
阅读:getTestSuiteTree
},
模式:{
型号:{
id:“id”,
parentId:“parentId”,
字段:{
Id:{type:“number”,可编辑:false,可空:false},
ParentId:{type:“number”,可编辑:false,可空:false},
名称:{type:“string”,可编辑:false,可空:false}
}
}
}
},
可排序:false,
可编辑:false,
栏目:[
{字段:“id”,宽度:“30px”},
{字段:“名称”,宽度:“300px”}
]
};
}
函数getTestSuiteTree(e){
testManagementService.GetTestSuiteTree().then(函数(结果){
e、 成功(result.plain());
},函数(错误){
e、 错误;
});
console.log('e',e);
返回e;
}
}
})();

解决方案是必须调用结果的plain()方法。结果由Restangular提供