更新模板数据extjs

时间:2017-08-14 21:40:10

标签: extjs

我正在创建一个窗口,其中包含一个recordref配置的面板,我已将一个名为tpl的配置传递给窗口组件,如下所示,我希望更新{{1使用recordref中的数据配置。

rowdblclick: function(view, record,element,rowIndex,e,eOpts){
    var me = this;
    Ext.create('MyWindow',{
            recordref: record
    });
}

我的窗口看起来像这样

Ext.define('MyWindow',{
    extend: 'Ext.window.Window',
    alias: 'widget.details',
    controller: 'details',
    ghost: false,
    constrain: true,
    title: 'Details',
    modal: true,
    resizable: false,
    autoScroll: true,
    items: [
        {
            xtype: 'panel',
            reference: 'infopanel',
            items: [
                {
                    xtype: 'panel',
                    tpl: ['<p>Name: {name}</p>',
                          '<p>Age: {age}</p>'],
                    listeners: {
                        render: 'updateTpl'
                    }
                },
                ... other items ...
            ]
        }
    ]
});

并且窗口控制器中的函数updateTpl看起来像

updateTpl: function(panel, eOpts){
    var me = this;
    var view = me.getView();
    var record = view.recordref;
    panel.update(record);
}

此代码会导致此错误

app.js?_dc=1502746390069:102863 Uncaught TypeError: Cannot set property 'innerHTML' of null
at constructor.overwrite (app.js?_dc=1502746390069:102863)
at constructor.overwrite (app.js?_dc=1502746390069:51335)
at constructor.update (app.js?_dc=1502746390069:65016)
at constructor.updateTpl (app.js?_dc=1502746390069:180214)
at constructor.fire (app.js?_dc=1502746390069:18721)
at constructor.doFireEvent (app.js?_dc=1502746390069:19625)
at constructor.doFireEvent (app.js?_dc=1502746390069:62695)
at constructor.prototype.doFireEvent (app.js?_dc=1502746390069:52784)
at constructor.fireEventArgs (app.js?_dc=1502746390069:19478)
at constructor.fireEvent (app.js?_dc=1502746390069:19437)

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

将数据对象传递给面板更新功能。

panel.update(record.getData());

update函数需要 htmlOrData 作为第一个参数。你也可以这样做:

panel.update({
        name: record.get('name'),
        age: record.get('age')
    })