シンプルなファイル ブラウザ アプリを作成しようとしていますが、本当に頭痛の種です。FixtureAdapter を使用して jsfiddle に移植しようとしました: http://jsfiddle.net/Rolus/bB2mr/23/
(フィドルでフィクスチャを正しく定義したかどうかはわかりません。このアダプターを使用するのは初めてです。)
私が(ルーターで)アプリにやらせようとしているのは、3つの「子」ファイルを含む「ルート」ファイル(ディレクトリ)をサーバーに要求することです。次に、サーバーはこれら 3 つの「子」ファイルを含む応答を返します。
{
"file":{
"uri":"L3Rlc3QvdGVzdDA=",
"size":1000,
"children":["dGVzdC90ZXN0MC90ZXN0MS5ibGE=",
"dGVzdC90ZXN0MC90ZXN0Mi5ibGE=",
"dGVzdC90ZXN0MC90ZXN0My5ibGE="]
}
}
(URI は base64 でエンコードされています。) 次に、子を取得するように要求すると、アプリは (予想どおり) 次の応答を返す 2 番目の要求を行います。
{
"files" : [
{
"uri":"dGVzdC90ZXN0MC90ZXN0MS5ibGE=",
"size":1,
"children":[]
},
{
"uri":"dGVzdC90ZXN0MC90ZXN0Mi5ibGE=",
"size":2,
"children":[]
},
{
"uri":"dGVzdC90ZXN0MC90ZXN0My5ibGE=",
"size":3,
"children":[]
}]
}
ただし、このプロセス中に次の 2 つのことに気付きました。
最初:「ルート」モデルはその「子」について知っているように見えますが(それは私が期待するリクエストを行います)、それ自身の「uri」または「サイズ」については知らないようです。これは、この didLoad メソッドを追加するためですモデルに:
didLoad: function () {
console.log("id: "+ this.id + " " + this.get("uri") + this.get("size"));
}
コンソールに次のように出力されます。
id: L3Rlc3QvdGVzdDA= nullnull
DS.JSONSerializer._primaryKey(App.File)
第二に、主キーを「uri」が「id」を返すように変更する私の努力を無視しているようです。モデルの primaryKey を変更するために、いくつかの異なる方法を試しています。
2 番目のリクエストを行った後、さらに 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
これは、2 番目の応答後の JSONSerializer の 4 回目の反復が原因のようですが、応答配列には 3 つの項目しかないため、4 回目の反復では「ハッシュ」は明らかに null です。問題は、4 回目の反復を行う理由です。
ここでのとりとめのないことが何らかの意味を成していることを願っています。フィドルを見るだけがおそらく最も簡単です。私は本当にアイデアを使い果たしたので、誰かがエラーを見つけてくれることを本当に望んでいます.
私は emberjs v1.0.0-pre.2-123-ga352c48 と ember-data リビジョン 11 を使用しています。
前もって感謝します。