我使用带有 jsonp 代理的商店填充列表视图,该代理向我的服务器发送 GET 请求。当应用程序启动时,请求被发送,并且列表项按照应有的响应呈现。现在,当我在我的数据库服务器中手动添加一个新项目并使用下面控制器中显示的代码刷新列表并检查控制台中的存储对象时,我可以看到新创建的项目在存储数据中。到目前为止一切顺利,一切都符合预期。但是,新项目不在刷新的列表中。奇怪的是,当我检查列表对象及其包含的存储对象时,不包括新创建的项目。但是,当我重新启动应用程序(而不是重新加载商店并刷新列表)时,新创建的项目会出现在列表中。在我看来,不知何故我有 2 个商店实例,一个带有新数据(我用 Ext.getStore 检索)和一个没有(列表视图内的那个),我认为这实际上应该是相同的。这怎么可能?下面我告诉你我是怎么做的。任何帮助是极大的赞赏。
控制器
Ext.define('VB1.controller.ListController', {
extend: 'Ext.app.Controller',
config: {
refs: {
listView: 'listview',
refreshButtonTap: '#refreshbutton',
},
control: {
refreshButtonTap: {
onRefreshList: 'refreshList',
},
}
},
launch: function () {
this.callParent(arguments);
Ext.getStore('MyStore').addListener('load', 'recordLoaded', this);
},
refreshList: function () {
var loadedStore = Ext.getStore('MyStore').load();
console.log(loadedStore) //here the new item is included
},
recordLoaded: function () {
var list = this.getListView();
list.refresh();
console.log(list) //here the new item is not included in the store object inside
//listobject
}
});
商店
Ext.define('VB1.store.MyStore', {
extend: 'Ext.data.Store',
alias: 'widget.mystore',
config: {
model: 'VB1.model.MyModel',
autoLoad: true,
proxy: {
type: 'jsonp',
url : 'myUrl.js',
enablePagingParams: false,
reader: {
type: 'json',
rootProperty: 'array.resources'
},
},
},
});
列表视图
Ext.define('VB1.view.ListView', {
extend: 'Ext.dataview.List',
alias: 'widget.listview',
requires: [
'Ext.dataview.List',
],
scrollable: 'vertical',
config: {
loadingText: "loading...",
emptyText: '</pre><div class="notes-list-empty-text">No notes found.</div><pre>',
itemTpl: '</pre><div class="list-item-title">{title}</div><div class="list-item-narrative"><img src="{listlogo}"/></div><pre>',
},
listeners: {
itemtap: function(list, index, item, record) {
this.fireEvent('showDetails', record, this);
}
},
});
这就是我在应用启动时将包括商店在内的列表添加到视口的方式
var listView = {
xtype: 'listview',
store: {xtype: 'mystore'},
}
Ext.Viewport.add(listView);