我可以将自己的模型用作存储下的数组中的一种元素

时间:2014-05-29 09:10:10

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

我有2个型号:噪音和雷达,现在我需要一个商店来保存它们:

我调用的商店:DataBufferStore。他们之间的关系:

一个DataBufferStore有6个名为:

的数组

Noises,Radars,PreviousNoises,PreviousRadars,PPNoises,PPRadars。

PP意味着甚至在之前 - >上一页上一页。

所以我想调用DataBufferStore以便以类似于以下方式获取这6个数据数组: DataBufferStore.Noises [X] DataBufferStore.PrevousNoises [Y] DataBufferStore.PPNoises [Z]

DataBufferStore.Radars [X] DataBufferStore.PrevousRadars [Y] DataBufferStore.PPRadars [Z]

这6个阵列是噪声模型和雷达模型的数组。

我可以这样做吗?

Ext.define('myApp.model.DataBuffer', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            { name: 'datetime', type: 'date' }
        ],
        associations: [
            { type: 'hasMany', model: 'myApp.model.radar', name: 'Radars' },
            { type: 'hasMany', model: 'myApp.model.Noise', name: 'Noises' },
            { type: 'hasMany', model: 'myApp.model.radar', name: 'PreviousRadars' },
            { type: 'hasMany', model: 'myApp.model.Noise', name: 'PreviousNoises' },
            { type: 'hasMany', model: 'myApp.model.radar', name: 'PPRadars' },
            { type: 'hasMany', model: 'myApp.model.Noise', name: 'PPNoises' }
        ]
    }
});

1 个答案:

答案 0 :(得分:0)

是的,你可以。

由于它是在Documentation中编写的,您可以创建链接到模型的商店(与数组相同),并将其与模型相关联。

Ext.define('Product', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {name: 'id',      type: 'int'},
            {name: 'user_id', type: 'int'},
            {name: 'name',    type: 'string'}
        ]
    }
});

Ext.define('User', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {name: 'id',   type: 'int'},
            {name: 'name', type: 'string'}
        ],
        // we can use the hasMany shortcut on the model to create a hasMany association
        hasMany: {model: 'Product', name: 'products'}
    }
});

这允许你使用商店方法,其中一些bieng非常有用。 要访问商店(或您调用的数组),您可以这样做:

var products = user.products();

然后使用此var访问您的元素。

强烈建议阅读文档以获取更多相关信息。

PS:如果你的前一个雷达'与您的“雷达”相关联,您甚至可以将关联嵌套并将其放入Radar模型中,该模型链接到Radar模型,并将其称为PreviousRadar。这样你就可以拥有任意数量的Previous。

编辑:解释PS部分: 你的数据存储器只有原始的雷达和噪音:

Ext.define('myApp.model.DataBuffer', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            { name: 'datetime', type: 'date' }
        ],
        associations: [
            { type: 'hasMany', model: 'Radar', name: 'Radars' },
            { type: 'hasMany', model: 'Noise', name: 'Noises' },
        ]
    }
});

您的雷达(或噪音)与自身有关联:

Ext.define('myApp.model.Radar', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            { name: 'radarName', type: 'string' }
        ],
        associations: [
            { type: 'hasOne', model: 'Radar', name: 'previousRadar' },
        ]
    }
});

这样,您就可以直接在雷达和前一个雷达之间建立链接。如果您有一个雷达的先前雷达,您可以使用hasMany代替。

我建议您查看here以了解有关侦听器的问题(这适用于存储中的侦听器,但您可以对实现Observable接口的每个对象执行相同操作)。 您可以在here找到可以收听的事件。 addrecords可能是您正在寻找的那个。