我使用ExtJS 6.0.0,使用TreeStore的REST代理。因此,当我从商店 store.remove(记录)中删除一些记录时,然后尝试与服务器同步更改并调用 store.sync(),什么也没发生!未调用sync的回调函数。
url:'/ admin / pages',以适当的格式返回简单的嵌套数据。 查看和更新操作运行良好。
我制作了一个简单的代码片段来说明问题:
Ext.define('Pages', {
extend: 'Ext.data.TreeModel',
fields: [
{name: 'id', type: 'int'},
{name: 'parent_id', type: 'int'},
{name: 'title', type: 'string'}
]
});
Ext.onReady(function() {
var store = Ext.create('Ext.data.TreeStore', {
model: 'Pages',
proxy: {
type: 'rest',
url: '/admin/pages',
}
});
var tree = Ext.create('Ext.tree.Panel', {
width: 500,
height: 300,
renderTo: Ext.getBody(),
rootVisible: false,
store: store,
multiSelect: true,
columns: [{
xtype: 'treecolumn',
text: 'title',
sortable: true,
dataIndex: 'title'
}],
tbar: [
{
text: 'Delete',
handler: function () {
var records = tree.getSelection();
store.remove(records); // remove nodes from tree
store.sync(); // do nothing!! WHY?
},
}
]
});
答案 0 :(得分:0)
如果将商店配置为autoSync:true,则记录的endEdit方法将已经在内部导致在商店上执行保存。仅当autoSync为false时,我们才需要手动保存,否则,我们将创建重复的交易。 使用store.sync()进行同步后,您需要调用store.load()