dojo.itemFileReadStore在嵌套数组上失败
dojo.itemFileReadStore fails on nested array
我遇到了一个问题,其中一个嵌套数组关联在一个对象内导致fetch声明失败。实际的JSON本身是有效的,当数组本身被注释时,它工作得很好。我想解析整个对象,并最终访问数组。
对象是这样的(这个邪恶的数组在"Page 2"项内):
{
"identifier":"pageTitle",
"label":"pageTitle",
"items":[
{
"pageTitle":"Page 1",
"pageUrl":"#"
},
{
"pageTitle":"Page 2",
"subTopics":[
{
"subTitle":"Subpage 1"
}
],
"pageUrl":"index.html"
},
{
"pageTitle":"Page 3",
"pageUrl":"#"
}
]
}
和获取代码(相当简单)
try {
var JSONObject = new dojo.data.ItemFileReadStore({url: "object.json"});
//Fetch nav objects and start building
JSONObject.fetch({
query: {"pageTitle":"*"},
onBegin: clearNav,
onComplete: buildNav,
onError: failureNav
});
} catch(xcept) {
console.warn("Failed to create JSONObject", xcept);
}
及相关功能
function clearNav(items, req) {
console.log("clearNav()");
dojo.query("nav.navigation ul").forEach(function(items, idx) {
items.innerHTML="";
});
console.warn("Navigation destroyed...");
}
function buildNav(items, req) {
console.log("buildNav()");
console.debug("items", items);
var theList = dojo.query("nav.navigation ul")[0];
dojo.forEach(items, function(item, idx) {
var newLI = document.createElement("li");
console.warn("url", document.URL);
if (document.URL.search(item.pageUrl)) {
newLI.setAttribute("class","ac");
}
newLI.innerHTML = "<a href='""+item.pageUrl+"'" >"+item.pageTitle+"</a>";
theList.appendChild(newLI);
});
}
function failureNav(e) {
console.debug("Error", e);
}
你有两个选择:
-
格式化JSON嵌套对象("subtopics")以符合与主对象具有相同的标识符名称;
{ "identifier":"pageTitle", "label":"pageTitle", "items":[ { "pageTitle":"Page 1", "pageUrl":"#" }, { "pageTitle":"Page 2", "subTopics":[ { "pageTitle":"Page 1.1", "subTitle":"Subpage 1" } ], "pageUrl":"index.html" }, { "pageTitle":"Page 3", "pageUrl":"#" } ] }
-
或者让Dojo忽略嵌套对象,创建参数为hierarchy: "false"的ItemFileReadStore
var JSONObject = new dojo.data.ItemFileReadStore({ url: "object.json", hierarchical: false });
您可以在文档中找到这个文档
相关文章:
- 在数组中插入对象失败
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- 断言错误:断言失败:坐标数组的长度应与步幅匹配
- ember dev fixes错误:“;断言失败:findAll的响应必须是数组,而不是未定义的“”;
- 去掉js可观察数组和复选框,选中绑定失败
- 在 ie8 中使用茉莉花比较数组失败
- 克隆对象数组失败
- Ember 断言失败:来自 findQuery 的响应必须是数组,而不是未定义
- 循环遍历 ArrayController 失败,因为它不是数组,即使控制器具有正确的数据模型也是如此
- 从数组获取非重复索引在 0 时失败
- 在 Javascript 中将带有空格的字符串数组转换为小写,然后在 Webkit 中搜索它们失败
- JavaScript 数组推送 Anon 函数失败
- Javascript 多维数组返回第一个值,然后失败
- 将数据数组传递给 $.ajax 失败
- ng-repeat失败,并显示一个对象数组
- 断言失败:#each 循环的值必须是数组余烬 js
- 在处理延迟数组时获取成功的延迟并忽略失败的延迟
- Javascript:forEach在一个就地数组上经常失败
- 将对象推入数组失败
- 在函数中破坏数组失败;let未被定义”;