我有一个后端,它返回一个JSON,我将它加载到一个商店,它加载正常,然后从控制器调用视图刷新,我总是得到视图的emptyText值,模板不重新生成
编辑:它现在正在运作!以下设置如果运行,问题是我以前查看视图的方式。控制器:
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'
})
;
回复示例:
{
"success": true,
"result": {
"publishers": [
{
"id": "009999",
"type": "xy",
"isReceipient": false,
"description": "xy"
},
{
"id": 45,
"type": "xy",
"isReceipient": true,
"description": "xy"
},
{
"id": 45,
"type": "xy",
"isReceipient": false,
"description": ""
}
],
"notes": [
{
"publisherId": "009999",
"text": "xy",
"created": "2014-02-23T18:24:06.074Z"
},
{
"publisherId": "45",
"text": "xy",
"created": "2014-02-23T18:24:06.074Z"
},
{
"publisherId": 45,
"text": "xy",
"created": "2014-02-23T18:24:06.074Z"
}
]
}
}
还有一件事:我还想在笔记中使用publisherId来打印出版商的名称和类型,所以我需要两个商店的数据。我想通过在DataView中查找来加载其他商店,并以这种方式获得发布者。这可行吗?
答案 0 :(得分:1)
一个简单的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>'
);
该类位于tpl
元素下,因此我认为在您的示例中,您需要在div
节点下创建tpl
。