Extjs DataView没有刷新 - 总是得到emptyText值

时间:2014-04-17 15:04:23

标签: extjs

我有一个后端,它返回一个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中查找来加载其他商店,并以这种方式获得发布者。这可行吗?

1 个答案:

答案 0 :(得分:1)

来自Ext.DataView.itemSelector

  

一个简单的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