Javascript 为什么用Typescript编写的自定义读取方法进行Kendo树列表数据源传输会变得疯狂?
我正在使用Angular 1.4.9和Typescript,我想显示一个树列表,其中数据来自Restangular调用的服务器。所以,我在Kendo数据源中有一个自定义的传输方法,如下所示 不幸的是,我还没有足够的打字经验 问题: 当加载页面时,Kendo TreeList启动readRepository方法从服务器获取数据,当加载数据或部分数据(我指的是一行)时,它会向服务器发出许多调用,对我来说,当它获取一行数据时,它似乎会使用它,然后不必要地再次调用服务器。我不明白为什么 请查看附件中的相关代码 我到目前为止所做的事: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方法从服务器获取数据,当加载数据或部分数据(我指的是一行)时,它会向服务器发出许多调用,对我来说,当它获取一行数据时,它似乎会使用它,然后不必要地再次调用服务器。我不明白为什么 请查看附件中的
- 我创建了同一个用javascript编写的控制器,它工作起来很有魅力
- 我尝试根据答案更改DataSourceTransport.read调用this.readRepository的方式,但结果是一样的
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提供