【问题标题】:Form not updated when values of binded store are changed绑定存储的值更改时表单未更新
【发布时间】:2021-10-08 00:17:14
【问题描述】:

我有一个包含各种元素的表单。例如一个组合框,这里是视图部分:

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 的值实际上是在变化的(在调试器中观察 store.get('argumentaireObjet') 在行前后),但内容我的表单未在我的页面中更新。我不明白为什么。有什么想法吗?

我尝试了各种技巧来刷新表单,但通常绑定应该可以。我不应该刷新。我错过了什么?

我正在使用 ExtJS 6。

【问题讨论】:

    标签: javascript forms extjs binding


    【解决方案1】:

    好的,这确实有效。我需要更改 ViewModel 中的值,而不是 Store 中的值。

    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);
                }
            }
        });
    }
    

    【讨论】:

    • 令我困扰的是,我很确定我正在修改商店的初始版本在某个时间点工作,当我进行与其他问题相关的更改时停止工作。
    猜你喜欢
    • 2012-06-01
    • 2014-08-01
    • 1970-01-01
    • 2020-02-06
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多