【问题标题】:Backbone model from JSON file appearing as attributeJSON 文件中的主干模型显示为属性
【发布时间】:2014-11-26 16:03:28
【问题描述】:

我正在尝试确定问题所在。基本上,我将一个包含 JSON 内容的文件加载到一个主干.js 集合中。它正在正确定位文件,加载内容,我可以(通过浏览器开发人员工具)看到 12 个 JSON 对象之一是可访问的,但它缺少其他 11 个对象,看起来加载的对象是被归类为“属性”。我对backbone.js 有点陌生,我不确定我做错了什么。代码及截图如下:

我用来从文件中加载 JSON 内容的代码:

var cmd = Backbone.Model.extend({});
var cmdList = Backbone.Collection.extend({
    model: cmd
});
var myCmds = new cmdList();

myCmds.fetch({
    add: true,
    url: "CustomFiles/Commands.txt",
    success: function () {
        console.log("JSON file load was successful", myCmds);
        $.each(myCmds, function (key, value) {
            console.log(key + ": " + value.Description);
        });
    },
    error: function () {
        console.log("There was some error in loading and processing the JSON file");
    }
});

这是包含 JSON 内容的 Commands.txt 文件的缩写版本:

{
"Command": {
    "build": 1,
    "TouchedBy": "corpUser1",
    "TouchedWhenUTC": "2013-10-24 06:58:15.5130000 +00:00",
    "CreatedBy": "corpUser1",
    "CreatedWhenUTC": "2013-10-24 06:58:15.5130000 +00:00",
    "Active": "TRUE",
    "MSRowversion": "",
    "id": 1,
    "Name": "Start Services",
    "Description": "To start all Services",
    "Type": 1,
    "Data": ""
},
"Command": {
    "build": 1,
    "TouchedBy": "corpUser1",
    "TouchedWhenUTC": "2013-10-24 06:58:15.5170000 +00:00",
    "CreatedBy": "corpUser1",
    "CreatedWhenUTC": "2013-10-24 06:58:15.5170000 +00:00",
    "Active": "TRUE",
    "MSRowversion": "",
    "id": 2,
    "Name": "Stop Services",
    "Description": "To stop all Services",
    "Type": 2,
    "Data": ""
},
[9 other JSON objects (commands) - formatted exactly the same way...],
"Command": {
    "build": 1,
    "TouchedBy": "corpUser2",
    "TouchedWhenUTC": "2014-10-30 08:48:37.0770000 +00:00",
    "CreatedBy": "corpUser2",
    "CreatedWhenUTC": "2014-10-30 08:48:37.0770000 +00:00",
    "Active": "TRUE",
    "MSRowversion": "",
    "id": 28,
    "Name": "Stop Services T",
    "Description": "To stop all Services for T",
    "Type": 2,
    "Data": ""
}
}

我的 JSON 内容似乎是正确的,但正如您从开发人员工具的屏幕截图中看到的那样,它正在加载,但并未加载所有对象,我无法访问“描述”的值' 'Command' 对象的属性。

在以下屏幕截图中,您可以看到仅加载了一个命令,并将其标识为属性。我是否过度分析/过度复杂化了这一点,还是我忽略了一些简单的事情?

如何正确加载和迭代这些 JSON 对象?


更新:

我修改了 Commands.txt 文件,使“Command”键不再存在,并更改了左括号和右括号,以便对象成为数组的一部分。所以,我从这个出发:

{
    "Command": {
        "build": 1,
        "TouchedBy": "corpUser1",
        "TouchedWhenUTC": "2013-10-24 06:58:15.5130000 +00:00",
        "CreatedBy": "corpUser1", 
        "CreatedWhenUTC": "2013-10-24 06:58:15.5130000 +00:00",
        "Active": "TRUE",
        "MSRowversion": "",
        "id": 1,
        "Name": "Start Services",
        "Description": "To start all Services",
        "Type": 1,
        "Data": ""
    },
    "Command": {
        "build": 1,
        "TouchedBy": "corpUser1",
        "TouchedWhenUTC": "2013-10-24 06:58:15.5170000 +00:00",
        "CreatedBy": "corpUser1",
        "CreatedWhenUTC": "2013-10-24 06:58:15.5170000 +00:00",
        "Active": "TRUE",
        "MSRowversion": "",
        "id": 2,
        "Name": "Stop Services",
        "Description": "To stop all Services",
        "Type": 2,
        "Data": ""
    },
    [9 other JSON objects (commands) - formatted exactly the same way...],
    "Command": {
        "build": 1,
        "TouchedBy": "corpUser2",
        "TouchedWhenUTC": "2014-10-30 08:48:37.0770000 +00:00",
        "CreatedBy": "corpUser2",
        "CreatedWhenUTC": "2014-10-30 08:48:37.0770000 +00:00",
        "Active": "TRUE",
        "MSRowversion": "",
        "id": 28,
        "Name": "Stop Services T",
        "Description": "To stop all Services for T",
        "Type": 2,
        "Data": ""
    }
}

到这里:

[{
    "build": 1,
    "TouchedBy": "corpUser1",
    "TouchedWhenUTC": "2013-10-24 06:58:15.5130000 +00:00",
    "CreatedBy": "corpUser1",
    "CreatedWhenUTC": "2013-10-24 06:58:15.5130000 +00:00",
    "Active": "TRUE",
    "MSRowversion": "",
    "id": 1,
    "Name": "Start Services",
    "Description": "To start all Services",
    "Type": 1,
    "Data": ""
},
{
    "build": 1,
    "TouchedBy": "corpUser1",
    "TouchedWhenUTC": "2013-10-24 06:58:15.5170000 +00:00",
    "CreatedBy": "corpUser1",
    "CreatedWhenUTC": "2013-10-24 06:58:15.5170000 +00:00",
    "Active": "TRUE",
    "MSRowversion": "",
    "id": 2,
    "Name": "Stop Services",
    "Description": "To stop all Services",
    "Type": 2,
    "Data": ""
},
[9 other JSON objects (commands) - formatted exactly the same way...],
{
    "build": 1,
    "TouchedBy": "corpUser2",
    "TouchedWhenUTC": "2014-10-30 08:48:37.0770000 +00:00",
    "CreatedBy": "corpUser2",
    "CreatedWhenUTC": "2014-10-30 08:48:37.0770000 +00:00",
    "Active": "TRUE",
    "MSRowversion": "",
    "id": 28,
    "Name": "Stop Services T",
    "Description": "To stop all Services for T",
    "Type": 2,
    "Data": ""
}]

这解决了我的大部分问题。我仍然在访问命令的属性值之一时遇到问题,但我会努力尝试找出这部分,如果需要,我会提出一个新问题。

【问题讨论】:

  • 您需要修复正在生成 Commands.txt 的任何损坏的工具,以便它生成 JSON,对象数组将是合适的。要么写你自己的解析器。
  • 感谢您发帖,如果我自己没有得出这个结论(一组对象),您的评论会对我有所帮助。可能会帮助其他人更快地到达那里......

标签: json backbone.js model


【解决方案1】:

您的对象中有三个具有相同名称 (Command) 的键。每个键都会覆盖最后一个键,这解释了为什么只加载了一个嵌套对象。

【讨论】:

  • 您的回答解决了我大约 95% 的问题。我对 XML 更加熟悉,并且最近开始过渡到 JSON,所以这种格式对我来说并没有什么不寻常的地方,但是一旦你提到它,我就意识到了这个问题。我发布了额外的内容,详细说明了我为纠正额外的部分所做的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
相关资源
最近更新 更多