将ExtJS Proxy AJAX响应映射到模型

时间:2012-08-19 04:40:23

标签: javascript json model-view-controller web-applications extjs

UPDATE:

这是我的读者/商店 - 不确定要向读者添加什么才能使其发挥作用

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的新手。

1 个答案:

答案 0 :(得分:1)

您在使用映射的正确轨道上,但您还需要定义一个读取器,您可以在JSON中指定where your records are - 请参阅官方文档以获取良好示例。 顺便说一句,谁认为$ t对于地图密钥是一个好主意?

修改: 您在此处编辑后是您的工作代码: http://jsfiddle.net/dbrin/mSJg3/

就调试而言:问题的关键是要清楚地看到服务中的有效负载(我使用FireBug来检查返回的JSON对象)。然后通过映射属性映射Model类以适合JSON对象,最后调整JSON reader以让它知道如何导航JSON有效负载(请参阅我的代码示例)。 一旦您的异常侦听器不再触发(再次参见代码示例),这意味着您将数据存入商店。为了实际看到数据,我使用了Illuminations firebug插件来检查数据存储。我只看到一个记录。有没有搞错?我观察到id Property被设置为一些时髦的URL。这是默认情况下发生的,因为我没有在模型上指定id属性。我使用了未定义的idProperty来解决这个时髦的行为(参见模型代码)。

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