我有一个带有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并没有在第一个实例调用后端插入数据,而是第二次运行。 有人可以帮忙吗。
答案 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设置为其他名称。