0

我认为文档对此不是很清楚 - 至少我无法弄清楚关联如何与 ExtJS 4 中的模型一起工作。让我们看一个简单的例子:

模型

Ext.define('app.model.Goo', {
    ...
    fields: ['id', 'foo_id', 'goo_field'],
    belongsTo: 'Foo'
});

Ext.define('app.model.Foo', {
   ... 
   fields: ['id', 'foo_field'],
   hasMany: {model: 'Goo', name: 'goos'} //
});

这使我可以轻松编写返回嵌套数据的服务器响应,例如:

{ 
    success: true,
    foo: {
       id: 42
       foo_field: 'bacon',
       goos: [ 
           { id: 0, goo_field: 'velociraptor' }, 
           { id: 1, goo_field: 'spidermonkey' },
           ...
       ]
    }
}

并将数据解析为各自的模型。但是如果我想延迟加载嵌套数据怎么办?假设我编写服务器,使其不会在返回的对象中发送任何goos字段。foo写是什么意思foo.goos().load()?什么被发送到我的服务器呢?GET <proxy:url>/<'id' of foo>/goos?

4

1 回答 1

1

如果您想延迟加载,goo则不应发送响应。但是你调用的是 foo.goos()。这将返回一个过滤器值为42 的商店(来自您的实例的主 ID )。基本上它为你做这样的事情:goofoogoo foo_idfoo

Ext.create('Ext.data.Store', {
    model: 'app.model.Goo',
    filters: [
        {
            property: 'foo_id',
            value: 42
        }
    ]
});

所以调用load是请求。假设您使用的是 REST 代理,您的goo代理将执行以下请求:GET <proxy:url>使用 filter-queryparameters: filter:[{"property":"foo_id","value":42}]

另外我相信您需要指定完全限定的类名(即。model: 'app.model.Goo')。

于 2013-08-29T07:40:42.913 回答