Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS ViewModel setData()仅在数据不同时起作用_Extjs_Combobox_Binding_Viewmodel - Fatal编程技术网

ExtJS ViewModel setData()仅在数据不同时起作用

ExtJS ViewModel setData()仅在数据不同时起作用,extjs,combobox,binding,viewmodel,Extjs,Combobox,Binding,Viewmodel,我有两个组合:第二个组合在表格上,取决于第一个组合。为此,将第二个值绑定到ViewModel数据特性。我制作了一个按钮来重置表单,并用第一个组合的值重新分配第二个组合的值(可能是更改) 问题是当我执行以下操作时:我更改第一个组合的值。当我第一次单击按钮时,它会工作(第二个组合被更改)。但是当我第二次单击时(两个组合的值相同),第二个组合被清空。如果第二个组合的值与第一个组合的值相同,则似乎不起作用。我做错了什么 这里是当第一个组合的值与第二个组合的值相对应时,viewmodel不会更改,这是合乎

我有两个组合:第二个组合在表格上,取决于第一个组合。为此,将第二个值绑定到ViewModel数据特性。我制作了一个按钮来重置表单,并用第一个组合的值重新分配第二个组合的值(可能是更改)

问题是当我执行以下操作时:我更改第一个组合的值。当我第一次单击按钮时,它会工作(第二个组合被更改)。但是当我第二次单击时(两个组合的值相同),第二个组合被清空。如果第二个组合的值与第一个组合的值相同,则似乎不起作用。我做错了什么


这里是

当第一个组合的值与第二个组合的值相对应时,viewmodel不会更改,这是合乎逻辑的。我们不需要额外的手术。因此,该值不会在第二个组合框中被替换,它只进行
重置

要强制更新模型,必须使用
notify
方法通知她

你可以在我的脸上看到这种行为


当值匹配且不匹配时,请查看调用堆栈。

试试看,我希望它会有所帮助。

使用组件查询选择器直接在组合框中设置值

// The data store containing the list of states
 var states = Ext.create('Ext.data.Store', {
 fields: ['abbr', 'name'],
 data : [
    {"abbr":"AL", "name":"Alabama"},
    {"abbr":"AK", "name":"Alaska"},
    {"abbr":"AZ", "name":"Arizona"}
 ]
});

var viewmodel = Ext.create('Ext.app.ViewModel', {
 data: {
    state: 'AL'
 }
});


var refCombo = Ext.create('Ext.form.field.ComboBox', {
 store: states,
 queryMode: 'local',
 itemId: 'refCombo',
 displayField: 'name',
 valueField: 'abbr',
 editable: false,
 value: 'AL',
 renderTo: Ext.getBody()
});

Ext.create('Ext.form.Panel', {
renderTo: Ext.getBody(),
viewModel: viewmodel,
items: [{
    xtype: 'combo',
    store: states,
    queryMode: 'local',
    itemId: 'refCombo2',
    displayField: 'name',
    valueField: 'abbr',
    editable: false,
    bind: {
        value: '{state}'
    }
 }, {
    xtype: 'button',
    text: 'CLICK',
    handler: function(button) {
        button.up('form').getForm().reset();
        viewmodel.setData({'state': refCombo.getValue()})
        let refCombo2 = Ext.ComponentQuery.query('#refCombo2')[0];
        refCombo2.setValue( refCombo.getValue());
    }
  }]
});

谢谢你的提问和提琴。非常感谢!我不知道
notify()
方法。我有,因为我认为
notify()
应该在
reset()
之后,但在
setValue()
之前。如果不行,那就不行了。当然。起初我是这样做的,但忘了保存它。我在修小提琴