gpt4 book ai didi

json - Sencha touch 2 加载存储和带有嵌套 JSON 的关联存储

转载 作者:行者123 更新时间:2023-12-04 21:40:42 26 4
gpt4 key购买 nike

我已经开始创建一个 Sencha Touch 2 应用程序,它定义了两个模型,更改和配置。更改属于配置。这两种型号也都有商店设置。在 Changes 存储中,我有一个代理设置来请求以 JSON 格式返回的数据。 JSON 数据有一个带有嵌套配置的 Change。 Change 加载得很好,但是当我尝试从 Change 实例获取关联的配置时,它不起作用。

我已经定义了这样的模型:

更改型号:

Ext.define('Changes.model.Change', {
extend: 'Ext.data.Model',
xtype: 'changemodel',

config: {
fields: [
{name:'id', type:'int'},
{name:'changeId', type:'string'},
{name:'briefDescription', type:'string'},
{name:'configuration_id', type:'int'}
],
associations: [{
type:'belongsTo',
model:'Changes.model.Configuration',
primaryKey: 'id',
foreignKey: 'configuration_id',
associationKey: 'configurations'
}],
},
});

配置型号:
Ext.define('Changes.model.Configuration', {
extend: 'Ext.data.Model',
xtype: 'configurationmodel',
config: {
fields: [
{ name: 'id', type: 'int'},
{ name: 'longName', type: 'string' },
{ name: 'ciName', type: 'string' },
],
hasMany: {model: 'Change', name: 'changes'}
}
});

每个型号都有一个商店。

更改存储:
Ext.define('Changes.store.Changes', {
extend: 'Ext.data.Store',
requires: 'Changes.model.Change',
config: {
model: 'Changes.model.Change',
proxy: {
type: 'ajax',
url: 'services/changes.php',
reader: {
type: 'json',
rootProperty: 'changes'
}
},
sorters: [{ property: 'briefDescription', direction: 'ASC'}],
}
});

配置存储:
Ext.define('Changes.store.Configurations', {
extend: 'Ext.data.Store',
requires: ['Ext.data.proxy.LocalStorage'],
config: {
model: 'Changes.model.Configuration',
grouper: {
sortProperty: "ciName",
direction: "DESC",
groupFn: function (record) {
return record.get('ciName')[0];
}
},
proxy: {
type: 'ajax',
url: 'services/configurationItems.php',
reader: {
type: 'json',
rootProperty: 'configurationItems'
}
}
}
});

我从 services/changes.php 返回的 JSON看起来像这样:
{
"success": true,
"changes": [
{
"id": 1,
"changeId": "XYZ19178263",
"briefDescription": "Loaded from Proxy",
"configuration_id": 3,
"configurations": [
{
"id": "3",
"longName": "999-99_-_windows_7_desktop.Computer.Windows",
"ciName": "999-99_-_windows_7_desktop"
}
]
}
]
}

在浏览器的控制台中,我可以发出以下命令:
Changes.myStore = Ext.getStore('Changes');
Changes.myStore.load();
Changes.record = Changes.myStore.findRecord('id', '1');
Changes.record.getAssociatedData()

最后一个命令将返回一个包含 Configuration 对象的对象,但所有字段值都显示 null除了 id这似乎被设置为一个随机值:
Object
Configuration: Object
ciName: null
id: "ext-record-11"
longName: null

谁能看出为什么嵌套 Configuration我的 JSON 中的实例没有被保存?并且应该嵌套 Configuration JSON 中的实例被添加到 Configurations自动存储?

最佳答案

可悲的是,这不起作用。看来是框架的一个缺点。您无法加载和保存关联的(聚合/嵌套)对象。您需要展平您的结构,然后自己在代码中关联对象。

因此,例如......你的 JSON 将是......

{
"success": true,
"changes": [
{
"id": 1,
"changeId": "XYZ19178263",
"briefDescription": "Loaded from Proxy"
}
]

}

第二个 JSON 文件/响应如下:
    {

"success": true,
"configurations": [
{
"id": "3",
"longName": "999-99_-_windows_7_desktop.Computer.Windows",
"ciName": "999-99_-_windows_7_desktop",
"change_id": 1
}
]
}

关于json - Sencha touch 2 加载存储和带有嵌套 JSON 的关联存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10940609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com