[英]How to set combox value on form from grid with nested data? Extjs 4.2 Mvc
我有一个网格,用组合框弹出一个编辑表单。 在显示视图之前,我先加载组合框存储。 然后,我使用form.loadRecord(record);
设置表单的值form.loadRecord(record);
。 这样可以加载主记录。 但是,如何加载绑定到组合框的关联数据值,以便正确设置组合框的值。
我知道我可以手动使用setValue,但是我想我想可以通过加载表单来处理。
如果我的表单有3个字段,请说firstName lastName,然后说一个ContactType组合框。 firstName和lastName在我的主记录中,其中ContactType是关联的记录。 如果我更改了lastName或firstName字段中的值,则会检测到更改并将该记录标记为脏。 如果更改组合框值,则记录不会标记为脏记录。 我猜是因为它们是两种不同的模型。 如何使其成为一个记录。 我认为在表格上有一个组合框,其值是从网格中的记录中设置的,这很常见,但是我找不到实现此目的的最佳方法的任何示例。
这是一些代码。
我的json看起来像这样。 主记录具有firstName姓氏具有一个关联记录是ContactType
{
"__ENTITIES":[
{
"__KEY":"289",
"__STAMP":12,
"ID":289,
"firstName":"a",
"middleName":"",
"lastName":"asd",
"ContactType":{
"__KEY":"2",
"__STAMP":4,
"ID":2,
"name":"Home"
}
}
]
}
控制器列表功能,编辑功能和更新功能在单击网格行时触发
list: function () {
var mystore = this.getStore('Contacts')
mystore.proxy.extraParams = { $expand: 'ContactType'};
mystore.load({
params: {
},
callback: function(r,options,success) {
// debugger;
} //callback
}); //store.load
editContact: function (grid, record) {
//load store for combobox
var store = this.getStore('ContactTypes');
store.load({
params: {
},
callback: function(r,options,success) {
// debugger;
} //callback
}); //store.load
var view = Ext.widget('contactsedit');
var form = view.down('form')
//load primary record
form.loadRecord(record);
//load associated record
form.loadRecord(record.getContactType());
updateContact: function (button) {
var win = button.up('window'),
form = win.down('form'),
record = form.getRecord(),
values = form.getValues(),
store = this.getStore('Contacts')
if (form.getForm().isValid()) {
if (this.addnew == true) {
store.add(values);
} else {
record.set(values);
}
store.sync();
win.close();
}
}
loadRecord(record.getContactType)
是关联数据的获取器。 我能够获取关联的数据,但不确定如何使它在组合框中设置值,或者如何使它充当一条记录并自动检测更改。
我的联系人模型
Ext.define('SimplyFundraising.model.Contact', {
extend : 'Wakanda.model',
requires:[
'SimplyFundraising.model.ContactType'
],
fields: ['firstName', 'middleName','lastName','ContactType.name'],
associations: [
{
type: 'hasOne',
model: 'SimplyFundraising.model.ContactType',
name: 'ContactTypes',
getterName: 'getContactType',
associationKey: 'ContactType'
}
]
});
ContactType模型
Ext.define('SimplyFundraising.model.ContactType', {
extend : 'Wakanda.model',
fields: ['__KEY','name',]
});
这是在带有嵌套数据的表单中为组合框设置值的正确方法吗?
如果我不使用关联,而只是将所有字段放到我的联系人模型中,即将所有ContactType字段添加到联系人模型,那么数据应该在同一记录中,并且更改跟踪将起作用。 但这似乎与MVC模式背道而驰,也与关联的原因背道而驰。
你们如何处理这种情况,任何例子都很棒!
谢谢,丹
如果您的表单正确加载了值,那么您要做的就是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.