当我在商店中插入值时,Extjs商店同步不起作用

时间:2018-09-13 13:49:02

标签: javascript extjs extjs6.2

我有一个带有widgetColumn的treePanel,其中包含默认文本的组合框窗口小部件。我的要求是,当我选择默认文本时,一条新记录应插入存储中并保存在数据库中。

{
    text: 'TC',
    dataIndex: 'scrTC',
    xtype: 'widgetcolumn',
    widget: {
        xtype: 'combo',
        store: 'TCStore',
        valueField: 'id',
        displayField: 'name',
        matchFieldWidth: false,
        listeners: {
          select: 'selectDefault'
        }
    }
}

控制器方法:

selectDefault: function(combo){
  loadData(combo, id, name); //there is a logic to get id & name, then pass it to loadData method
}

loadData: function(combo, id, name){
   var store = combo.getStore();
  store.insert(0,{id: id, name: name});
  store.sync();
  combo.setValue(id);
}

问题是当我第一次选择默认文本时,存储同步方法未在数据库中插入数据,而是组合显示新值并存储新值(使用调试器查看)。 当我再次选择时,数据将插入数据库。

我调试了代码,执行流程是正确的,唯一的问题是sync并没有在第一个实例调用后端插入数据,而是第二次运行。 有人可以帮忙吗。

2 个答案:

答案 0 :(得分:0)

商店将使用它的代理与后端同步数据,因此请确保将其配置为您正在使用的后端类型。商店本身可以配置有代理,也可以默认为其模型上的代理。没有看到商店配置,我不能肯定地说。

例如,如果您使用的是REST后端,请在配置了商店的模型上使用REST代理:https://docs.sencha.com/extjs/6.6.0/modern/Ext.data.proxy.Rest.html

答案 1 :(得分:0)

如果您为插入的记录分配ID,sync会认为该ID已存在于数据库中,因此不会触发添加事件(插入的记录不会获得phantom属性)。重命名id字段或将模型的idProperty设置为其他名称。