2

这是一个两部分的问题。第一个是关于 Sencha 如何解析 JSON 和读取存储的技术问题。

我有两个模型,订单和用户:

Ext.regModel('Order', {
  fields: [
    {name: 'id', type: 'int'},
    {name: 'user_id', type: 'int'},
    {name: 'name', type: 'string'},
    {name: 'price', type: 'float'},
  ],
  belongsTo: 'User'
});

Ext.regModel('User',{
  fields: [
    {name: 'id', type: 'int'},
    {name: 'first_name', type: 'string'},
    {name: 'last_name', type: 'string'},
    {name: 'email', type: 'string'},
  ],
  associations:[
    {type: 'hasMany', model: 'Order', name: 'orders'}
  ]
});

总的来说,一个非常简单的关联。我有以下从服务器检索的 JSON:

[
  {
    "id":22,
    "price":0.0,
    "name":"My First Order",
    "user_id":3,
    "user": {
      "id": 3,
      "first_name": "Michael",
      "last_name": "Jones",
      "email": "michaeljones@email.com"
    }
  }
]

最后,这是我的商店:

var o = new Ext.data.Store({
    model: "Order",
    sorters: "name",
    getGroupString: function(record){
        return record.get('name')[0]
    },
    proxy: {
        type: 'ajax',
        url: '/orders',
            headers: {'Accept': 'application/json'},
            reader: {
             type: 'json'
            }
    },
    autoLoad: true
});

Ext.regStore("Orders",o);

当我阅读订单数据时,我找不到任何关于用户的提及。所以,然后我在 Sencha 文档中找到了这个方便的指南:http ://dev.sencha.com/deploy/touch/docs/?class=Ext.data.Reader

但是,文档仅显示了 hasMany 关联的示例 - 它不包括从 belongsTo 关联中提取数据。我试着在网上搜索了几个小时,结果空手而归。从订单字段中检索用户字段的正确方法是什么?

更新:我删除了存储中的代理和自动加载参数,并将其替换为数据参数,该参数包含与我的示例中的服务器返回的完全相同的 JSON 字符串。你猜怎么着?有效。但是,我仍然需要解决这个问题,以便它在与我的服务器通信时能够正常工作!有任何想法吗?

第二部分:你对煎茶触摸有什么看法?该框架似乎非常强大,但文档和示例似乎相当薄弱。我还担心解析这些数据变得多么困难。那里有更好的选择吗?

4

2 回答 2

1

我对 Sencha 也很陌生,并且无法回答您的问题,但是由于您说直接加载数据时它可以工作,因此解决方法可能是使用普通的 Ext.Ajax.request 获取 JSON 对象() 然后使用 o.loadData(theData)。

另外,你看过这个http://dev.sencha.com/deploy/touch/docs/?class=Ext.data.BelongsToAssociation吗?

至于您的第二个问题,Sencha 的文档显然可能会更好,但是与您使用 API 获得的通常的狗屎相比,我认为它实际上非常好 - 无论您选择什么框架,都必须找到模糊的配置选项。

我真的很喜欢它的风格+动画;据我所知,没有任何东西具有相同水平的“令人惊叹的因素”;我认为如果你没有找到一个优雅的解决方案,这也许值得编写你自己的数据解析器。客户不会因为代码优雅或数据结构特别健壮而购买/使用产品;他们购买它们是因为它们很时髦或使用时髦的应用程序呈现。

SASS+Compass 集成还使得自定义样式比普通 CSS 容易得多。

最后,不知道你是否需要这个,但是我一直在用 Sencha 的“TouchCharts”的 alpha 版(我想接下来几个月会发布),印象非常深刻;动画图表(缓动)、与数据系列的交互(项目点击、比较项目、缩放)以及图表自动更新,如数据视图。

于 2011-07-22T00:37:20.413 回答
0

我遇到了同样的问题。问题有多个可能的答案。

我能够通过指定例如解决问题

hasMany: [
    { associatedName: 'collectionfield', model: 'collectionmodel'}
]

同样出于某种原因,我不得不将模型范围限定为 app.model.collectionmodel

{
  id: '1'
  q: 'Foo?',
  answers: [
    { id: 8, assessment_question_answer_id: '1', text: 'bar'},
    { id: 9, assessment_question_answer_id: '1', text: 'baz'},
    { id: 10, assessment_question_answer_id: '1', text: 'steve'},
  ]
}


Ext.define('Hk.model.AssessmentQuestion', { 
...
  hasMany: [
    { associatedName: 'answers', model: 'Hk.model.AssessmentAnswer'}
// ... and then

Ext.define('Hk.model.AssessmentAnswer', {
...
  belongsTo: {model:'Hk.model.AssessmentQuestion', foreignKey: 'assessment_question_id'}
于 2012-08-03T23:45:14.353 回答