我有一點獨特的問題。我目前正試圖將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