如何使用Sencha Proxy使用JSON响应的内部属性

时间:2012-03-15 11:11:16

标签: sencha-touch extjs sencha-touch-2

JSONP代理主要适用于我,但我需要根据JSON响应中的一些嵌套属性设置模型的属性。如果不扩展Reader类,我无法想象如何做到这一点,但我认为可能有一种更容易的方式,我只是缺少。

我的食谱模型:

Ext.define('NC.model.Recipe', {
  extend: 'Ext.data.Model',
  config: {
    fields: [
      { name: 'name', type: 'string' },
      { name: 'image', type: 'string' },
      { name: 'preparationText', type: 'string' },
      { name: 'ingredientsText', type: 'string' },
      { name: 'servings', type: 'string' }
    ]
  }
});

我的商店:

Ext.define('NC.store.Recipes', {
  extend: 'Ext.data.Store',

  config: {
    model: 'NC.model.Recipe',
    storeId: 'Recipes',
    proxy: {
      type: 'jsonp',
      url: 'http://anExternalSite.com/api',
      callbackKey: 'callback',
      filterParam: 'text',
      extraParams: {
        type: 'Recipe'
      },
      reader: {
        type: 'json',
        idProperty: 'uuid',
      }
    }
  }
});

JSON格式:

[
  {
    uuid: "/UUID(XXXX)/",
    name: "Spicy Peanut Noodle Salad",
    image: "http://someplace.com/noodle-salad.jpg",
    properties: {
      preparationText: "Make it all nice and stuff",
      ingredientsText: "Heaps of fresh food",
      servings: "serves 4",
    }
  },
  { ... },
  { ... }
]

我希望这些3'属性' - preparationTextingredientsTextservings放置在模型中,但目前只有id,name和image。使这项工作的方法是什么?如果确实涉及扩展Reader类,那么某些方向会很棒。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以像这样更改代码以访问嵌套值

{ name: 'preparationText', type: 'string', mapping: 'properties.preparationText' },

此映射路径应该开始排除根元素。