Extjs数据视图未刷新-始终获取emptyText值
我有一个后端,它返回一个JSON,我将它加载到一个存储中,它加载良好,然后从控制器调用视图刷新,我总是得到视图的emptyText值,模板不是refeshing 编辑:它正在工作!下面的设置如果正常,问题是我如何查找视图 控制器:Extjs数据视图未刷新-始终获取emptyText值,extjs,Extjs,我有一个后端,它返回一个JSON,我将它加载到一个存储中,它加载良好,然后从控制器调用视图刷新,我总是得到视图的emptyText值,模板不是refeshing 编辑:它正在工作!下面的设置如果正常,问题是我如何查找视图 控制器: showNotes: function(activityId) { var me = this; Ext.Ajax.request({ url: MyApp.Config.BASE_URL + '/someURL',
showNotes: function(activityId) {
var me = this;
Ext.Ajax.request({
url: MyApp.Config.BASE_URL + '/someURL',
method: 'GET',
success: me.successGetNotes.bind(me),
failure: me.failureGetNotes
});
},
successGetNotes: function(result) {
var notesStore = this.getNotesStore(), //This gets me the store ok
publishersStore = this.getPublishersStore(),
data = Ext.JSON.decode(result.responseText);
notesStore.loadRawData(data.result.notes);
publishersStore.loadRawData(data.result.publishers);
this.getNotesPanel().refresh(); //this calls the refresh on the DataView ok
//TODO
},
型号:
Ext.define('MyApp.model.Note', {
extend: 'Ext.data.Model',
fields: [
'publisherId',
'text' ,
{
name: 'created',
type: 'date',
dateFormat: 'c'
}
]
});
商店:
Ext.define('MyApp.store.Notes', {
extend: 'Ext.data.Store',
model: 'MyApp.model.Note',
alias: 'store.Notes',
storeId: 'Notes'
});
主要观点:
...
items: [
{
xtype: 'notes-panel',
//store: Ext.data.StoreManager.lookup('Notes'), NO!!!
store: 'Notes', //YES!
flex: 1
}
]
...
注意事项小组:
Ext.define('MyApp.view.sections.notes.NotesPanel' ,{
extend: 'Ext.DataView',
alias: 'widget.notes-panel',
//deferInitialRefresh: false,
itemSelector: 'div.something',
tpl: new Ext.XTemplate(
// '<tpl for=".">',
// '<div class="something">',
// '<p>ID:{publisherId}</p>',
// '<p>{text}</p>',
// '<p>{created}</p>',
// '</div>'
// '</tpl>',
'<table width="100%" border="0">',
'<tpl for=".">',
'<div class = "something">',
'<tr><td width="85">ID:</td><td width="315">{publisherId}</td></tr>',
'<tr><td>Note:</td><td>{text}</td></tr>',
'</div>',
'</tpl>',
'<table>'
),
emptyText: 'No data available'
})
;
还有一件事:我还想在notes中使用publisherId打印发布者名称和类型,因此我需要两个存储区的数据。我正在考虑通过在DataView中查找来加载另一个存储,并以这种方式获取发布者。这可行吗 来自:
一个简单的CSS选择器(例如div.some-class或span:first-child),用于确定此DataView将使用哪些节点。itemSelector用于将DOM节点映射到记录。因此,应该只有一个根级别的元素与每条记录的选择器相匹配
正如您可以在DataView的示例中看到的:
var imageTpl = new Ext.XTemplate(
'<tpl for=".">',
'<div style="margin-bottom: 10px;" class="thumb-wrap">',
'<img src="{src}" />',
'<br/><span>{caption}</span>',
'</div>',
'</tpl>'
);
var imageTpl=new Ext.XTemplate(
'',
'',
'',
“
{caption}”,
'',
''
);
该类位于
tpl
元素下,因此我认为在您的示例中,您需要在tpl
节点下创建一个div
。当您需要注释时,我认为您的调用发布者。我实际上调用了这两个。我还需要出版商,但我还没有对出版商商店做任何事情。我没有看到任何错误的调用:(这似乎没有帮助:(我在节点中移动了div,我也像示例中那样重新编写了它,但仍然不起作用。确定您可以相应地更新您的帖子吗?并测试以下几件事:1.isnotesStore.getCount()
>0?2.删除this.getNotesPanel().refresh()
原因如果数据发生更改,它应该自动刷新3.isthis.getNotesPanel().getCount()
>0?更新了post.notesStore.getCount为3(我的JSON响应与post中的一样)。刷新在视图类上是不受限制的。this.getNotesPanel生成:构造函数{xtype:“notes panel”,store:constructor,flex:1,initialConfig:Object,events:Object…}在store属性中,数据确实有一个空数组,不管我是否刷新视图。但是如果我进行刷新,我甚至没有得到emtyText。我想这是因为视图没有收到存储更改的通知,但我不知道为什么。啊,它正在工作!!!最后。奇怪的是,问题是我使用了查找来查找存储对于视图。现在我只使用它的ID。我将更新帖子,问题出现在主视图中:store:Ext.data.StoreManager.lookup('Notes'),不起作用,现在我使用:store:'Notes',并起作用。查找是从控制器复制的事实上,我在那里调试了它,效果很好。谢谢你的帮助,你的调试建议让我找到了问题!啊,是的,extjs中的每个存储定义都只是一个字符串,应该看到:D
var imageTpl = new Ext.XTemplate(
'<tpl for=".">',
'<div style="margin-bottom: 10px;" class="thumb-wrap">',
'<img src="{src}" />',
'<br/><span>{caption}</span>',
'</div>',
'</tpl>'
);