5

试图弄清楚剑道世界并遇到将网格设置为 json 数组数据源的问题。

Error is "JavaScript runtime error: Invalid template: <tr
data-uid="#=data.uid#" role='row'><td  role='gridcell'>#=data.Account
Num==null?'':data.Account Num#</td>...".

我注意到在这个错误中我看到了空值,想知道这是否意味着数据没有绑定?

但是,我看到的是列标题,而不是任何行。我还必须提到,我的数据中没有任何 ID 字段,因为我使用的是 SQL 视图中的临时表。

function populateGrid(search) {
    $("#grdAttributes").kendoGrid({
        dataSource: {
            transport: {
                read: {
                    url: "http://127.0.0.2:6080/arcgis/rest/services/WW/WW2/MapServer/exts/RestSOE/Search%20Query?columnName=" + search.columnName + "&operand=" + search.operand + "&searchVal=" + search.searchVal + "&f=",
                    dataType: "json",
                    type: 'GET'
                }
            },
        },
        serverPaging: true,
        serverSorting: true,
        serverFiltering: true,
        scrollable: true,
        height: 150

    });
    $("#grdAttributes").data().kendoGrid.dataSource.view()
};

如果我继续解决 VS2012 中的错误,我确实会在网格中看到列标题。只是没有行数据。(下面的示例 JSON :)

 -[{
     -"Address": "PO BOX 20",
     -"City": "HAVENWOOD",
     -"Location": "",
     -"Name 1": "UNIVERSITY",
     -"Name 2": "",
     -"Street": "NEY AVE",
     -"Street Num": "16",
     -"Legacy ROD Num": null - "Repeat Client": "Y" -
 }, ...

这是错误的开始:

`Unhandled exception at line 11, column 6788 in
http://--------:51392/WW/js/kendo.web.min.js 0x800a139e - JavaScript
runtime error: Invalid template:'<tr data-uid="#=data.uid#"
role='row'><td  role='gridcell'>#=data.Account
Num==null?'':data.Account Num#</td><td 
role='gridcell'>#=data.address==null?'':data.address#</td><td 
role='gridcell'>#=data.Arb Location==null?'':data.Location#</td><td 
role='gridcell'>#=data.WNum==null?'':data.Num#</td><td`

希望这是足够的信息来获得一些反馈。[敲打我的头]。提前致谢!

4

1 回答 1

9

很难完全判断,但看起来生成的模板有问题,因为您的数据字段名称中有空格,例如:

'Account Num',在模板中它试图访问“data.Account Num”,这当然是行不通的。

将您的数据设置为没有空格,以查看这是否真的是问题所在。如果这是问题所在,另一种解决方案(如果您想保留空格)将是手动输入列而不是让它自动生成它。

...处理空格:

首先使用以下字段设置您的数据源方案:

schema: {
    data: "Data",
    model: {
        fields: {
            "Name": { type: "string" },
            "Account Num": { type: "string" }
        }
    }
}

然后对于您的列,使用模板定义它们,如下所示:

columns: [
   {
      field: "Name",
      title: "Name",
      template: "#=data['Name']==null?'':data['Name']#"
   },
   {
      field: "Account Num",
      title: "Account Num",
      template: "#=data['Account Num']==null?'':data['Account Num']#"
   }
]

您最初拥有的是 kendo 试图生成模板本身,但它试图访问

data.Account Num

这当然不会在 javascript 中工作,因此,您可以手动定义每列的模板来代替访问

data['Account Num']

这将正常工作,并希望得到您正在寻找的结果。

于 2013-10-16T22:27:23.297 回答