gpt4 book ai didi

forms - 在 ExtJS 4 中加载和保存嵌套数据

转载 作者:行者123 更新时间:2023-12-02 03:48:01 25 4
gpt4 key购买 nike

我有两个模型:Book belongsTo Author。让我们调查一下在从服务器到 ExtJs 并返回的过程中与书籍数据一起发送的作者数据。服务器将以下嵌套数据发送到 ExtJs:

{
success : true,
data: {
id: '23',
name: 'JavaScript - The definitive guide'
author: { // <<-- nested author data
id: '45',
name: 'David Flanagan',
}
}
}

在 ExtJs 方面,数据由以下模型处理:

Ext.define('My.models.Book', {
extend: 'Ext.data.Model',
idProperty: 'id',

fields: [
'id',,
'name',
{name: 'author_id', mapping: 'Author.id'}, // <<-- flat author data
],

proxy: {
type: 'ajax',
api: {
read: 'My/Books/index',
create: 'My/Books/create',
update: 'My/Books/update',
destroy: 'My/Books/delete'
},
reader: {
type: 'json',
root: 'data',
},
writer: {
type: 'json',
root: 'data',
},
},

associatinons: [{
type: 'belongsTo',
model: 'My.models.Author',
associationKey: 'Author',
}]
});

感谢映射Author.idauthor_id领域Book模型 ( {name: 'author_id', mapping: 'Author.id'} ) 我能够将作者的数据加载到以下用于编辑图书数据的表单中:

Ext.define('My.views.books.Form', {
extend: 'Ext.form.Panel',
initComponent: function () {
var me = this;
me.items = [{
xtype: 'container',
layout:'anchor',
defaults:{
anchor: '95%'
},
items:[{
xtype: 'textfield',
fieldLabel: 'Book title',
name: 'name'
},{
xtype: 'combo',
fieldLabel: 'Author',
name: 'author_id', // <<-- flat author data
store: ...
}]
}];
me.buttons = [{
text: 'Save',
scope: me,
handler: me.onSave
}];
me.callParent(arguments);
},
...
});

当然有一个专供作者使用的模型,但是当我需要一次将书籍和作者数据加载到一种形式时,我(暂时)看不到上面显示的其他可能性(当然告诉我如果有更好的解决方案,请它)。

现在问题来了:我将从组合中选择其他作者,然后保存表格。由于书籍记录变脏(author_id 现在显示为 Book 模型字段),将向 'My/Books/update' 提出请求将以下数据发送到服务器的 URL(这很好,我正在编辑书籍):

{
data: {
id: '23',
name: 'JavaScript - The definitive guide',
author_id: '78' // <<-- flat author data
}
}

返回到服务器的数据与发送到 ExtJs 的结构不同,必须进行某种翻译,例如:

$data['Author']['id'] = @$data['author_id'];
unset($data['author_id']);

我在问:是否有可能通过 ExtJs 形式处理数据,使它们以与来自服务器的相同结构返回服务器?怎么做?

这个问题已经以某种方式讨论过here , herehere ,但这些讨论都没有明确回答。

在此先感谢您的帮助! :)

最佳答案

简短回答:不,还没有。

更长的答案:您可以创建自己的编写器来处理您的数据结构,并以与接收它时相同的方式将其发送回服务器。

您可以通过子类化来创建自己的编写器:http://docs.sencha.com/ext-js/4-2/#!/api/Ext.data.writer.Writer并在您的代理中使用它

您可以在模型上创建一个函数来更改其结构。由于您没有使用商店,因此您可以创建一个函数 saveModel(),您可以在其中更改模型结构并调用 save() 方法。

关于forms - 在 ExtJS 4 中加载和保存嵌套数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15624966/

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