我有一点独特的问题。我目前正试图将JSON数据源连接到剑道网格。正因为如此,JSON中的任何地方都不会有#
,因为它会与kendo混淆。所以,我不得不采取的数据是这样的:重命名JSON属性,如果它们包含某个字符而没有JSON.stringify
[
{"ID#": "1", "Prop1": "Val1#"},
{"ID#": "2", "Prop2": "Val2"},
]
,逃离#
使剑道可以把它理解:
[
{"ID\#": "1", "Prop1": "Val1\#"},
{"ID\#": "2", "Prop2": "Val2"},
]
这个最大的问题是,JSON可以像任何事情:有可以是任何数字/键/值的名称。
我尝试:
我试图逃跑的#
像这样:var dataSource = JSON.parse(result.replace("#", "\\#"));
然而,当我尝试这个JSON.parse抛出一个错误:
SyntaxError: JSON.parse: bad escaped character at line 1 column 7 of the JSON data
然后我试图取代#
与#
。事实证明,Kendo只能在行中支持HTML实体,而不是在列标题中支持HTML实体,而不会出现模板错误。所以我可以替换像这样的属性值:
var dataSource = JSON.parse(result, function(key, value) {
if(typeof value === "string") {
return value.replace("#", "#");
}
else {
return value;
}
});
这适用于值!然而,钥匙仍然可以包含#
这将弄乱我的剑道网格。我试图循环遍历每个对象和键/对,并且如果它具有#
,则替换该键,但由于某种原因,当我调用Object.keys
时,返回的数组仅仅是0和1,即使这不是我的数据命名的。
for (var object in dataSource) {
for (var property in object) {
if (object.hasOwnProperty(property)) {
var keys = Object.keys(object);
for(var key in keys) {
var oldName = key;
var newName = key.replace("#", "\#");
object[newName] = object[oldName];
delete object[oldName];
}
}
}
}
上面的这部分似乎没有效果。它甚至不会抛出错误。
我也尝试用字符串替换#
:hashliteral
。然后,在创建kendo网格之后,我试着用jQuery替换所有hashliteral
和#
。
var fixed = $("#grid").html().replace(/hashliteral/g, "#");
$("#grid").html(fixed);
这是行不通的,但它打破了剑道网格和所有的绑定。网格功能是必须的,所以我不能使用这个解决方案。
只是为了重温
我试图删除/替换或逃避JSON数据的所有#
,使之与我的剑道电网正确运行。
- 我不能使用
JSON.stringify
与\\#
更换#
因为那时JSON.parse
失败。 - 我不能使用
#
,因为Kendo头文件不能有特殊字符。 - 我不能使用jQuery修改
$("#grid").html()
,因为它打破了网格绑定。 - 关键可以是任何东西。价值也可以是任何东西。
- JSON不嵌套或复杂。
- 我无法在KendoGrid列上定义字段/标题,因为我不知道字段/标题需要什么,数据非常动态。
我即将准备放弃这一点,只是从数据中删除所有#
。如果任何人都可以想出一些办法来实现这一点:重命名对象的属性,以便所有#
前面有\
,这将不胜感激。对于我的生活,我无法找到解决这个问题的办法。
似乎没有任何问题,在#中有一个值。检查[this out](http://dojo.telerik.com/IJaKuH)。尽管我设法通过'#'逃避了标题的标题,但是它把模板搞砸了。 IMO是一个错误,它应该照顾它... – DontVoteMeDown
为什么你不循环所有的属性,并建立一个新的对象进一步处理?我错过了什么? – lexith
@lexith我还没有找到一种方法来做到这一点,但不知道什么oldkeys/newkeys – Sunden