更改绑定存储的值时不会更新表单
Form not updated when values of binded store are changed
我有一个包含各种元素的表单。例如一个组合框,这里是视图部分:
xtype: 'combobox',
fieldLabel : 'Position de la commission',
labelAlign : 'top',
padding:'20 0 0 0',
displayField: 'parametreLibelle',
valueField: 'parametreValeur',
queryMode: 'local',
bind : {
value: '{argumentairePosition}',
store : '{positionsCommissionStore}'
},
reference : 'argumentairePosition',
itemId:'argumentairePosition',
listeners: {
click: {
element: 'inputEl',
fn: 'onArgumentairePositionClick'
}
}
我调用了一个函数来更改组合框中的选定值:
onAmendementReferenceChange: function() {
let me = this;
let amdtId = this.lookupReference('amendementDeReference').value;
me.ajaxRequest({
url: '/eloi/grille/changerAmendementReferenceArgumentaire',
method: 'GET',
params: { amdtId: amdtId },
successFn: function (record) {
let serverResponse = record && record.responseText ? Util.decodeJson(record.responseText) : undefined;
let formulaireData = serverResponse ? serverResponse.data : undefined;
if (formulaireData) {
let vm = me.getViewModel();
let store = vm.get('argumentaireRendreIdentiqueStore').first();
store.set('argumentaireObjet', formulaireData.argumentaireObjet);
store.set('argumentaireTexte', formulaireData.argumentaireTexte);
store.set('argumentairePosition', formulaireData.argumentairePosition); // Breakpoint here
store.set('argumentairePositionRapporteur', formulaireData.argumentairePositionRapporteur);
store.set('argumentaireAmendementId', formulaireData.argumentaireAmendementId);
//me.getView().refreshView();
}
}
});
}
当我在浏览器中的注释指示的行中放置一个断点时,我可以看到商店的值实际上正在发生变化(在调试器中查看该行前后的 store.get('argumentaireObjet')
),但是我的表单内容没有在我的页面中更新。我不明白为什么。有什么想法吗?
我尝试了各种技巧来刷新表单,但通常情况下,绑定应该可以。我不应该刷新。我错过了什么?
我正在使用 ExtJS 6。
好的,这确实有效。我需要更改 ViewModel 中的值,而不是商店中的值。
onAmendementReferenceChange: function() {
let me = this;
let amdtId = this.lookupReference('amendementDeReference').value;
me.ajaxRequest({
url: '/eloi/grille/changerAmendementReferenceArgumentaire',
method: 'GET',
params: { amdtId: amdtId },
successFn: function (record) {
let serverResponse = record && record.responseText ? Util.decodeJson(record.responseText) : undefined;
let formulaireData = serverResponse ? serverResponse.data : undefined;
if (formulaireData) {
let vm = me.getViewModel();
vm.set('argumentaireObjet', formulaireData.argumentaireObjet);
vm.set('argumentaireTexte', formulaireData.argumentaireTexte);
vm.set('argumentairePosition', formulaireData.argumentairePosition);
vm.set('argumentairePositionRapporteur', formulaireData.argumentairePositionRapporteur);
vm.set('argumentaireAmendementId', formulaireData.argumentaireAmendementId);
}
}
});
}
我有一个包含各种元素的表单。例如一个组合框,这里是视图部分:
xtype: 'combobox',
fieldLabel : 'Position de la commission',
labelAlign : 'top',
padding:'20 0 0 0',
displayField: 'parametreLibelle',
valueField: 'parametreValeur',
queryMode: 'local',
bind : {
value: '{argumentairePosition}',
store : '{positionsCommissionStore}'
},
reference : 'argumentairePosition',
itemId:'argumentairePosition',
listeners: {
click: {
element: 'inputEl',
fn: 'onArgumentairePositionClick'
}
}
我调用了一个函数来更改组合框中的选定值:
onAmendementReferenceChange: function() {
let me = this;
let amdtId = this.lookupReference('amendementDeReference').value;
me.ajaxRequest({
url: '/eloi/grille/changerAmendementReferenceArgumentaire',
method: 'GET',
params: { amdtId: amdtId },
successFn: function (record) {
let serverResponse = record && record.responseText ? Util.decodeJson(record.responseText) : undefined;
let formulaireData = serverResponse ? serverResponse.data : undefined;
if (formulaireData) {
let vm = me.getViewModel();
let store = vm.get('argumentaireRendreIdentiqueStore').first();
store.set('argumentaireObjet', formulaireData.argumentaireObjet);
store.set('argumentaireTexte', formulaireData.argumentaireTexte);
store.set('argumentairePosition', formulaireData.argumentairePosition); // Breakpoint here
store.set('argumentairePositionRapporteur', formulaireData.argumentairePositionRapporteur);
store.set('argumentaireAmendementId', formulaireData.argumentaireAmendementId);
//me.getView().refreshView();
}
}
});
}
当我在浏览器中的注释指示的行中放置一个断点时,我可以看到商店的值实际上正在发生变化(在调试器中查看该行前后的 store.get('argumentaireObjet')
),但是我的表单内容没有在我的页面中更新。我不明白为什么。有什么想法吗?
我尝试了各种技巧来刷新表单,但通常情况下,绑定应该可以。我不应该刷新。我错过了什么?
我正在使用 ExtJS 6。
好的,这确实有效。我需要更改 ViewModel 中的值,而不是商店中的值。
onAmendementReferenceChange: function() {
let me = this;
let amdtId = this.lookupReference('amendementDeReference').value;
me.ajaxRequest({
url: '/eloi/grille/changerAmendementReferenceArgumentaire',
method: 'GET',
params: { amdtId: amdtId },
successFn: function (record) {
let serverResponse = record && record.responseText ? Util.decodeJson(record.responseText) : undefined;
let formulaireData = serverResponse ? serverResponse.data : undefined;
if (formulaireData) {
let vm = me.getViewModel();
vm.set('argumentaireObjet', formulaireData.argumentaireObjet);
vm.set('argumentaireTexte', formulaireData.argumentaireTexte);
vm.set('argumentairePosition', formulaireData.argumentairePosition);
vm.set('argumentairePositionRapporteur', formulaireData.argumentairePositionRapporteur);
vm.set('argumentaireAmendementId', formulaireData.argumentaireAmendementId);
}
}
});
}