我们已经慢慢习惯了ExtJS,我们最近开始使用视图模型将数据绑定到我们的表单面板。一般来说,我们试图使我们的ExtJS模型与我们的后端java模型保持一致,并且所需的任何转换都是通过视图模型公式完成的。在查看一般数据时,这非常有效,但是当我们想要显示在任何类型的模型中不存在的更具体的数据时,我们不确定如何在客户端中处理它们的加载和创建。例如:
我有一个id
和description
属性的文件夹模型。通过读取请求加载文件夹模型时,模型从数据库等加载描述。与用户模型相同。两个属性id
和username
。我的问题是,如果我有一个表单面板,我会显示用户及其相关文件夹。就数据库层而言,有一个1:1的表,其中user id
连接到folder id
以匹配用户和他的个人文件夹。但是,我们在任何模型中都没有此信息。有一个名为getUserFolder
的特定服务,它返回给定的特定folder
的user id
对象。我应该如何将它放在我的面板视图模型中,如何处理加载过程?
我应该创建一个表示表的新模型并使用get请求来获得关联,然后使用formulas
获取给定folder id
的匹配user
?我应该使用正常的Ext.Ajax.request
来获取folder id
然后加载文件夹模型?我应该创建一个返回所有数据(用户和文件夹)的常规服务,然后在客户端通过两个模型的setData
在请求回调上匹配它们吗?什么是最佳做法?
TL; DR:在视图模型中加载模型数据工作正常,但如何解决在视图模型中加载非模型数据的问题?它们仅在特定场景中需要,并且不包含在模型的创建中。
您的任务与视图几乎没有关系。它是所有模型,数据模型:) ExtJS中有associations的概念,包括1:1 scenario。所以我建议调查一下。
数据绑定和为其提供支持的ViewModel是Ext JS的强大补充。
Ext.create('Ext.panel.Panel', {
title: 'Simple Form',
viewModel: {
type: 'test'
},
layout: 'form',
defaultType: 'textfield',
items: [{
fieldLabel: 'First Name',
bind: '{firstName}' // uses "test" ViewModel from parent
},{
fieldLabel: 'Last Name',
bind: '{lastName}'
}]
});