存储不在 ExtJs 中重新加载
Store not reloading in ExtJs
我正在处理需要绑定组合框但未重新加载最新数据的显示。
只有一次对数据库的调用,之后它使用缓存中的现有存储。如何让它每次都从数据库重新加载(或者至少每次我们重新打开显示时)。下面是代码。
//store
Ext.define('NetworkStore', {
extend: 'Ext.data.Store',
alias: 'NetworkStore',
fields: ['Id', 'value'],
storeId: 'NetworkStore',
autoLoad: true,
proxy: {
type: 'ajax',
useDefaultXhrHeader: false,
actionMethods: { create: "POST", read: "GET", update: "POST", destroy: "POST" },
headers: { 'Content-Type': 'application/x-www-form-urlencode' },
limitParam: false,
startParam: false,
pageParam: false,
extraParams: {
Style: 1
},
url: 'url',
reader: {
type: 'json'
}
}
});
xtype: 'combo',
name: 'NetworkIDList',
store: Ext.create('NetworkStore').load({
params: {
Style: 3
}
}),
将所需的逻辑添加到列表 expand
事件处理程序。
xtype: 'combo',
name: 'NetworkIDList',
listeners: {
expand: function () {
this.getStore().load()
}
},
store: Ext.create('NetworkStore').load({
params: {
Style: 3
}
})
官方文档在lastQuery
提供:
listeners: {
beforequery: function (qe) {
delete qe.combo.lastQuery;
}
}
这是完整的来源:
/**
* @property {String} lastQuery
* The value of the match string used to filter the store. Delete this property to force
* a requery. Example use:
*
* var combo = new Ext.form.field.ComboBox({
* ...
* queryMode: 'remote',
* listeners: {
* // delete the previous query in the beforequery event or set
* // combo.lastQuery = null (this will reload the store the next time it expands)
* beforequery: function(qe){
* delete qe.combo.lastQuery;
* }
* }
* });
*
* To make sure the filter in the store is not cleared the first time the ComboBox trigger
* is used configure the combo with `lastQuery=''`. Example use:
*
* var combo = new Ext.form.field.ComboBox({
* ...
* queryMode: 'local',
* triggerAction: 'all',
* lastQuery: ''
* });
*/
如果我们按照下面给出的方式传递存储,它将始终从数据库而不是缓存中获取存储。
store: {
type: 'NetworkStore',
proxy: {
extraParams: {
Style: 3
}
}
}
remoteFilter: true
true 如果想在每次展开组合框时从服务器端加载数据,
false 如果您想在加载数据后在本地加载数据。
如果 remoteFilter 属性 未在商店中设置,则默认为 false。
将此 属性 设置为 true 可能会解决问题
首先,你需要将你的愿望转化为系统的逻辑。
"at least every-time when we reopen the display"
喜欢下面的逻辑:
- 监听小部件的事件,即"when we reopen the display"
- 重新加载小部件的商店
{
xtype: 'combo',
name: 'NetworkIDList',
store: Ext.create('NetworkStore').load({
params: {
Style: 3
}
}),
//Add this:
afterRender: function(){
//Just do this to load the store
this.getStore().load();
}
}
afterRender 是可以声明为方法的示例侦听器之一。您可以使用许多其他事件侦听器来放置代码,以便根据需要一次又一次地加载小部件的商店。
见https://docs.sencha.com/extjs/7.0.0/modern/Ext.Widget.html#method-afterRender
.load() 是 ProxyStore 的方法,可用于首先手动加载或重新加载商店。
见https://docs.sencha.com/extjs/7.0.0/modern/Ext.data.ProxyStore.html#method-load
希望对您有所帮助。
我正在处理需要绑定组合框但未重新加载最新数据的显示。 只有一次对数据库的调用,之后它使用缓存中的现有存储。如何让它每次都从数据库重新加载(或者至少每次我们重新打开显示时)。下面是代码。
//store
Ext.define('NetworkStore', {
extend: 'Ext.data.Store',
alias: 'NetworkStore',
fields: ['Id', 'value'],
storeId: 'NetworkStore',
autoLoad: true,
proxy: {
type: 'ajax',
useDefaultXhrHeader: false,
actionMethods: { create: "POST", read: "GET", update: "POST", destroy: "POST" },
headers: { 'Content-Type': 'application/x-www-form-urlencode' },
limitParam: false,
startParam: false,
pageParam: false,
extraParams: {
Style: 1
},
url: 'url',
reader: {
type: 'json'
}
}
});
xtype: 'combo',
name: 'NetworkIDList',
store: Ext.create('NetworkStore').load({
params: {
Style: 3
}
}),
将所需的逻辑添加到列表 expand
事件处理程序。
xtype: 'combo',
name: 'NetworkIDList',
listeners: {
expand: function () {
this.getStore().load()
}
},
store: Ext.create('NetworkStore').load({
params: {
Style: 3
}
})
官方文档在lastQuery
提供:
listeners: {
beforequery: function (qe) {
delete qe.combo.lastQuery;
}
}
这是完整的来源:
/**
* @property {String} lastQuery
* The value of the match string used to filter the store. Delete this property to force
* a requery. Example use:
*
* var combo = new Ext.form.field.ComboBox({
* ...
* queryMode: 'remote',
* listeners: {
* // delete the previous query in the beforequery event or set
* // combo.lastQuery = null (this will reload the store the next time it expands)
* beforequery: function(qe){
* delete qe.combo.lastQuery;
* }
* }
* });
*
* To make sure the filter in the store is not cleared the first time the ComboBox trigger
* is used configure the combo with `lastQuery=''`. Example use:
*
* var combo = new Ext.form.field.ComboBox({
* ...
* queryMode: 'local',
* triggerAction: 'all',
* lastQuery: ''
* });
*/
如果我们按照下面给出的方式传递存储,它将始终从数据库而不是缓存中获取存储。
store: {
type: 'NetworkStore',
proxy: {
extraParams: {
Style: 3
}
}
}
remoteFilter: true
true 如果想在每次展开组合框时从服务器端加载数据, false 如果您想在加载数据后在本地加载数据。
如果 remoteFilter 属性 未在商店中设置,则默认为 false。 将此 属性 设置为 true 可能会解决问题
首先,你需要将你的愿望转化为系统的逻辑。
"at least every-time when we reopen the display"
喜欢下面的逻辑:
- 监听小部件的事件,即"when we reopen the display"
- 重新加载小部件的商店
{
xtype: 'combo',
name: 'NetworkIDList',
store: Ext.create('NetworkStore').load({
params: {
Style: 3
}
}),
//Add this:
afterRender: function(){
//Just do this to load the store
this.getStore().load();
}
}
afterRender 是可以声明为方法的示例侦听器之一。您可以使用许多其他事件侦听器来放置代码,以便根据需要一次又一次地加载小部件的商店。
见https://docs.sencha.com/extjs/7.0.0/modern/Ext.Widget.html#method-afterRender
.load() 是 ProxyStore 的方法,可用于首先手动加载或重新加载商店。
见https://docs.sencha.com/extjs/7.0.0/modern/Ext.data.ProxyStore.html#method-load
希望对您有所帮助。