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'
      }
    ]
  }
}

我不确定如何调和这两者。

我试过了...

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 对象)。然后通过映射属性映射您的模型类以适合 JSON 对象,最后调整 JSON 阅读器以使其知道如何导航您的 JSON 有效负载(请参阅我的代码示例)。一旦您的异常侦听器不再触发(再次参见代码示例),这意味着您将数据放入存储中。为了实际查看数据,我使用了 Illuminations firebug 插件来检查数据存储。我只看过一张唱片。有没有搞错?我观察到 id 属性被设置为一些时髦的 URL。这是默认情况下发生的,因为我没有在模型上指定 id 属性。我求助于将 idProperty 拆分为 undefined 来解决这种奇怪的行为(参见模型代码)。

我使用 jsfiddle 快速迭代更改并运行以查看阅读器中的错误。一旦我没有更多错误,我就让 jsfiddle 向我展示我刚刚构建的应用程序,这样我就可以通过使用 show/light url 来使用 Illuminations 插件:http: //jsfiddle.net/dbrin/mSJg3/show/light/

于 2012-08-19T04:59:11.357 回答