1

我正在尝试制作一个简单的文件浏览器应用程序,但这让我很头疼。我试图将它移植到带有 FixtureAdapter 的 jsfiddle 中:http: //jsfiddle.net/Rolus/bB2mr/23/

(我不确定我是否在小提琴中正确定义了固定装置,这是我第一次使用这个适配器。)

我试图让应用程序(在路由器中)做的是向服务器请求一个包含 3 个“子”文件的“根”文件(目录)。然后服务器返回包含这 3 个“子”文件的响应:

{
    "file":{
        "uri":"L3Rlc3QvdGVzdDA=",
        "size":1000,
        "children":["dGVzdC90ZXN0MC90ZXN0MS5ibGE=",
                    "dGVzdC90ZXN0MC90ZXN0Mi5ibGE=",
                    "dGVzdC90ZXN0MC90ZXN0My5ibGE="]
    }
}

(URI 是 base64 编码的。)然后我要求它获取孩子,并且应用程序发出第二个请求(如预期的那样),该请求返回以下响应:

{
    "files" : [
        {
            "uri":"dGVzdC90ZXN0MC90ZXN0MS5ibGE=",
            "size":1,
            "children":[]
        },
        {
            "uri":"dGVzdC90ZXN0MC90ZXN0Mi5ibGE=",
            "size":2,
            "children":[]
        },
        {
            "uri":"dGVzdC90ZXN0MC90ZXN0My5ibGE=",
            "size":3,
            "children":[]
        }]
}

然而,在这个过程中,我注意到了两件事:

第一:即使'root'模型似乎知道它的'children'(它提出了我期望它提出的请求)它似乎不知道它自己的'uri'或'size',因为添加了这个didLoad方法到模型:

didLoad: function () {
    console.log("id: "+ this.id + " " + this.get("uri") + this.get("size"));
}

结果将以下内容打印到控制台:

id: L3Rlc3QvdGVzdDA= nullnull

其次,它似乎忽略了我将主键更改为“uri”DS.JSONSerializer._primaryKey(App.File)返回“id”的努力。我正在尝试几种不同的方法来更改模型中的 primaryKey。

在发出第二个请求后,又有 3 个 didLoad 行输出到控制台:

id: dGVzdC90ZXN0MC90ZXN0MS5ibGE= nullnull
id: dGVzdC90ZXN0MC90ZXN0Mi5ibGE= nullnull
id: dGVzdC90ZXN0MC90ZXN0My5ibGE= nullnull

我的视图更新为 3 个空行(“文件名:”,请参阅小提琴中的模板),但它永远不会填充响应数据。

此时脚本终于遇到了错误:

Uncaught TypeError ('hash' undefined): Cannot call method 'hasOwnProperty' of null ember-data.js:6246
    DS.JSONSerializer.DS.Serializer.extend.extractId

这似乎是由第二次响应后 JSONSerializer 的第 4 次迭代引起的,而响应数组中只有 3 个项目,所以第 4 次迭代“哈希”显然为空,问题是它为什么要进行第 4 次迭代。

我希望我在这里的胡言乱语是有道理的。只看小提琴可能是最简单的。我真的希望有人能发现其中的一些错误,因为我真的没有想法了。

我正在使用 emberjs v1.0.0-pre.2-123-ga352c48 和 ember-data 修订版 11。

提前致谢。

4

0 回答 0