Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 我可以使用自己的模型作为存储下的数组中的元素类型吗_Extjs_Sencha Touch_Sencha Touch 2 - Fatal编程技术网

Extjs 我可以使用自己的模型作为存储下的数组中的元素类型吗

Extjs 我可以使用自己的模型作为存储下的数组中的元素类型吗,extjs,sencha-touch,sencha-touch-2,Extjs,Sencha Touch,Sencha Touch 2,我有两种型号:噪音和雷达,现在我需要一个商店来存放它们: 我所称的商店:DataBufferStore。它们之间的关系: 一个DataBufferStore有6个数组,称为: 噪音,雷达,以前的噪音,以前的雷达,PP噪音,PPR雷达 PP表示甚至在上一个->上一个之前 因此,我想调用DataBufferStore,以类似以下方式获取这6个数据数组: DataBufferStore.Noises[X] DataBufferStore.PrevousNoises[Y] DataBufferStore

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

我所称的商店:DataBufferStore。它们之间的关系:

一个DataBufferStore有6个数组,称为:

噪音,雷达,以前的噪音,以前的雷达,PP噪音,PPR雷达

PP表示甚至在上一个->上一个之前

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

数据缓冲存储器.雷达[X] 数据缓冲存储。前置雷达[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' }
        ]
    }
});
是的,你可以

如中所述,可以创建链接到模型(与数组相同)的存储,并将其与模型关联

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'}
    }
});
这允许您使用存储方法,其中一些方法非常有用。 要访问存储区(或您所称的阵列),您可以这样做:

var products = user.products();
然后使用此
var
访问元素

强烈建议阅读文档以了解更多信息

PS:如果你的“PreviousRadars”链接到你的“Radars”,你甚至可以嵌套这些关联,并将其中一个放在链接到雷达模型的雷达模型中,称之为PreviousRadar。这样,您就可以拥有任意多的上一层

编辑:解释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

我建议您查找有关侦听器的问题(这是针对存储中的侦听器的,但您可以对实现可观察接口的每个对象执行相同的操作)。
你可以找到可以收听的活动。
addrecords
可能就是您要查找的记录。

为什么不将它们保留为数组呢?指定
雷达
作为模型上的字段,不要指定类型。hi@Evantimboli那么如何编写代码?你能给我举个例子吗?嗨,藏红花,谢谢你的回复。你的帖子的PS部分更可取,你能用代码示例解释一下吗?另外,如何编写一个“监听器”,当存储区内的数据发生变化时,它将被触发?我添加了关于PS的更多细节,以及监听器的一些链接。嗨,Saffron,我回到了这个项目。你知道如何初始化这个模型吗?就像任何模型一样。如果要访问关联,请查看有关此关联的文档。hasMany使用函数(答案中的myradar.products())访问存储,hasOne是一个简单的myradar.getRadar()或mynoise.getNoise()。