0

アップデート:

これが私のリーダー/ストアです-これを機能させるためにリーダーに何を追加すればよいかわかりません

Ext.define('YT.store.Videos', {
  extend: 'Ext.data.Store',
  model: 'YT.model.Video',
  autoLoad: true,
  proxy: {
    type: 'ajax',
    url: 'https://gdata.youtube.com/feeds/api/videos',
    reader: {
            type: 'json',
            root: 'feed',
            record: 'entry',
            successProperty: 'success'
     },
    listeners: {
      exception: function(store, response, app){
        console.log('exception...');
        console.log(response);
      }
    }
  }
});

これが私のモデルです:

Ext.define('YT.model.Video', {
  extend: 'Ext.data.Model',
  autoLoad: true,
  fields: [
    'title',
    'published',
    'content'
  ]
});

応答の例を次に示します。

{
  version: '1.0',
  encoding: 'UTF-8',
  feed: {
    junk: 'blahblahblahblah',
    entry: [
      title: {
        $t: 'title'
      },
      content: {
        encoding: 'flash/application',
        src: 'http://youtube.com/watch?q=someCatVideo'
      },
      published: {
        $t: '12-28-2012'
      }
    ]
  }
}

2つを調和させる方法がわかりません。

私はもう試した...

Ext.define('YT.model.Video', {
  extend: 'Ext.data.Model',
  autoLoad: true,
  fields: [
    {name: 'title', mapping: 'title.$t'},
    {name: 'published', mapping: 'published.$t'},
    {name: 'content', mapping: 'content.src'}
  ]
});

ボーナス:

これらの手法の実装をデバッグする方法に関するヒントを確実に探していますが、私は JavaScript MVC の初心者です。

4

1 に答える 1

1

マッピングは正しい方向に進んでいますが、返される JSON 内でレコードがどこにあるかを指定するリーダーを定義する必要もあります。良い例については、公式ドキュメントを参照してください。ちなみに、$t がマップ キーに適していると誰が考えたでしょうか。

編集:編集後、作業コードは次のとおりです: http://jsfiddle.net/dbrin/mSJg3/

デバッグに関しては、問題の鍵は、サービスからのペイロードを明確に確認することでした (FireBug を使用して、返された JSON オブジェクトを調べました)。次に、マッピング属性を使用して Model クラスを JSON オブジェクトに適合するようにマッピングし、最後に JSON リーダーを調整して、JSON ペイロードをナビゲートする方法を知らせます (私のコード例を参照)。例外リスナーが起動しなくなったら (それらのコード例をもう一度参照してください)、データをストアに取得したことを意味します。実際にデータを確認するために、Illuminations firebug プラグインを使用してデータ ストアを調べました。私が見たレコードは1つだけです。一体何?id プロパティがファンキーな URL に設定されていることを確認しました。モデルでid属性を指定しなかったため、これはデフォルトで発生していました。このファンキーな動作を回避するために、idProperty を undefined に指定することにしました (モデル コードを参照)。

jsfiddle を使用して、変更と実行をすばやく反復し、リーダーでエラーを確認しました。エラーがなくなったら、jsfiddle に、show/light URL を使用して Illuminations プラグインを使用できるようにビルドしたばかりのアプリを見せてもらいました: http://jsfiddle.net/dbrin/mSJg3/show/light/

于 2012-08-19T04:59:11.357 に答える