尝试通过查询动态更改列列表...
[当我构造TreeList时,我要求列:
$("#treelist").kendoTreeList({
columns: AnalyseCenterSKUService.getKPIColumnList($scope)
如果我返回带有字段的简单数组,则它正在工作..
如果我调用$http.get
(在我的getKPIColumnList(..)函数内部)将一些列添加到现有的列数组中,则TreeList的构造不正确。
任何建议将不胜感激! :)
EDIT 22-10-2019 09:00
树列表初始化
$("#treelist").kendoTreeList({
columns: AnalyseCenterSKUService.getKPIColumnList($scope),
scrollable: true,
columnMenu : {
columns : true
},
height: "100%",
dataBound: function (e) {
ExpandAll();
},
dataSource: {
schema: {
model: {
id: "id",
parentId: "parentId",
fields: {
id: { type: "number" },
parentId: { type: "number", nullable: true },
fields: {
id: { type: "number" },
parentId: { type: "number", nullable: false }
}
}
}
},
transport: {
read: {
url: "/api/AnalyseCenter/GetWorkOrderTree/0",
dataType: "json"
}
}
}
[getKPIColumnList返回一个静态数组+一些带有动态列的推送(来自数据库)
angular.module('AnalyseCenterDirectives')
.service ('AnalyseCenterSKUService', function ($http) {
var toReturn = [ {field: "Name", title: "Hiérachie SKU", width: "30%" }, ..., ..., .... ];
我尝试使用此功能来推送数据库结果
return $http.get("/api/AnalyseCenter/GetWorkOrderHistorianAdditonalColumns?equipmentName=" + equipmentName)
.then(function (result) {
var data = result.data;
if (data && data !== 'undefined') {
var fromDB = data;
angular.forEach(fromDB, function (tag) {
var tagName = tag.replace(".","_");
toReturn.push({
field: tagName, title: tag, width: '10%',
attributes: { style: "text-align:right;"} })
})
[存储过程GetWorkOrderHistorianAdditonalColumns
返回字符串列表(将来的列)
那是因为ajax is async,这意味着您的树列表正在初始化中[[before请求完成。 JavaScript新手的经典问题。我建议您花些时间阅读有关Ajax的信息,例如How does AJAX works。
回到您的问题。您需要在success回调中创建树形列表(由于我不知道您在函数内部正在做什么或用于打开该框架的框架,因此我无法为您提供更完整的解决方案ajax请求)与结果数据(可能是您的列)一起使用。然后它将像使用数组初始化它一样工作。