ExtJS - 如何在同步商店时传递 ID?
ExtJS - How do I pass ID when syncing store?
在 ExtJS 6.2 上,我像这样从数据库中获取数据:myStore.load({id: myId);
。
如何在同步时传递 ID?
这不起作用:myStore.sync({id: myId);
我正在使用 REST 代理,我的 URL 格式如下:mydomain/users/1
您可以简单地使用myStore.sync()
,不需要指定id
。 sync
函数将检查存储内容,并根据需要 add/delete/update 记录。
使用 REST 时,您可以将 Ext.data.write.Writer
的 writeRecordId
(参见 here)设置为 false
,因为使用 REST id
通常附加到URL,如您的情况。
我通过扩展 Ext.data.proxy.Rest
并覆盖 buildUrl
方法来解决问题,以便能够从请求参数中提取 ID。然后我在我的模型中使用了这个覆盖的代理:
Ext.define('MYPROJ.proxy.Settings', {
extend : 'Ext.data.proxy.Rest',
alias : 'proxy.settings',
buildUrl(request) {
const url = this.callParent([request]);
const id = request.getParams().id;
if (id) {
delete request.getParams().id;
const proxyUrl = request.getProxy().getUrl();
return url.replace(proxyUrl, `${proxyUrl}/${id}`);
}
return url;
}
});
Ext.define('MYPROJ.model.Setting', {
extend : 'Ext.data.Model',
alias : 'model.setting',
clientIdProperty: 'clientId',
fields: [{
name : 'id',
type : 'int',
persist : false
}, {
name : 'name',
type : 'string',
unique : true
}],
proxy: {
type : 'settings', // <- Use overridden proxy here
url : `/something/settings`
}
});
然后在我的代码中我可以像这样使用 sync()
:
const myID = 10;
this.settingsStore.load({id: myID});
//...
this.settingsStore.sync({params: {id: myID}});
当 sync()
被调用时 myID
将从 MYPROJ.proxy.Settings
上的参数中提取并添加到 URL (/something/settings/10).
在 ExtJS 6.2 上,我像这样从数据库中获取数据:myStore.load({id: myId);
。
如何在同步时传递 ID?
这不起作用:myStore.sync({id: myId);
我正在使用 REST 代理,我的 URL 格式如下:mydomain/users/1
您可以简单地使用myStore.sync()
,不需要指定id
。 sync
函数将检查存储内容,并根据需要 add/delete/update 记录。
使用 REST 时,您可以将 Ext.data.write.Writer
的 writeRecordId
(参见 here)设置为 false
,因为使用 REST id
通常附加到URL,如您的情况。
我通过扩展 Ext.data.proxy.Rest
并覆盖 buildUrl
方法来解决问题,以便能够从请求参数中提取 ID。然后我在我的模型中使用了这个覆盖的代理:
Ext.define('MYPROJ.proxy.Settings', {
extend : 'Ext.data.proxy.Rest',
alias : 'proxy.settings',
buildUrl(request) {
const url = this.callParent([request]);
const id = request.getParams().id;
if (id) {
delete request.getParams().id;
const proxyUrl = request.getProxy().getUrl();
return url.replace(proxyUrl, `${proxyUrl}/${id}`);
}
return url;
}
});
Ext.define('MYPROJ.model.Setting', {
extend : 'Ext.data.Model',
alias : 'model.setting',
clientIdProperty: 'clientId',
fields: [{
name : 'id',
type : 'int',
persist : false
}, {
name : 'name',
type : 'string',
unique : true
}],
proxy: {
type : 'settings', // <- Use overridden proxy here
url : `/something/settings`
}
});
然后在我的代码中我可以像这样使用 sync()
:
const myID = 10;
this.settingsStore.load({id: myID});
//...
this.settingsStore.sync({params: {id: myID}});
当 sync()
被调用时 myID
将从 MYPROJ.proxy.Settings
上的参数中提取并添加到 URL (/something/settings/10).