javascript - 如何设置自定义组件模板并传递模板参数?

标签 javascript extjs

我想使用一些自定义模板创建自定义组件。我希望这个模板有一些参数。现在我的代码如下所示:

    Ext.define('Ext.ux.TestComponent', {
        extend:'Ext.Component',
        alias: 'widget.testcomponent', 
        requires: [
            'Ext.XTemplate'
        ],
        constructor: function(config) {
            Ext.applyIf(config, {
                tpl: [
                    '<div class="custom_cls" custom_attr="{custom_attr_value}">Hello world</div>',
                    {compiled: true}
                ]
            });
            this.callParent([config]);
        }
    });

    Ext.create("Ext.ux.TestComponent",{
        renderTo: document.getElementById("component")
    });

这是一个fiddle用这个代码。这段代码的第一个问题是我的自定义模板根本没有呈现。第二个问题是我不知道如何将参数传递给该模板(以及在我的示例中设置 custom_attr)。例如,当我扩展 Button 时,我知道我可以使用 renderTplgetTemplateArgs() 以及当我扩展 DataView 时>,我可以在构造函数中配置模板。但当我扩展 Component 时,这一切都不起作用。那么,这有什么问题以及如何解决它?

最佳答案

您需要在 renderTpl 中定义您的模板配置。
可以通过 renderData 应用其他数据.

Ext.define('Ext.ux.TestComponent', {
    extend: 'Ext.Component',
    renderTpl: [
        '<div class="custom_cls" custom_attr="{custom_attr_value}">Hello</div>'
    ],
    renderData: {
        custom_attr_value: "TestValue"
    }
});

这是完整的示例:
https://fiddle.sencha.com/#view/editor&fiddle/21eg

<小时/>

作为移交 renderData 对象的替代方法,您可以在组件中实现 initRenderData 函数。 该函数由 mixin Ext.util.Renderable 调用,由 Ext.Component 使用。

Ext.define('Ext.ux.TestComponent', {
    extend: 'Ext.Component',
    renderTpl: [
        '<div>{title}</div>'
    ],

    config: {
        title: 'default',
    },

    initRenderData() {
        return this;
    },
});

Ext.create("Ext.ux.TestComponent", {
    renderTo: Ext.getBody(),
    title: 'TestTitle'
});

这是我的替代解决方案的完整示例:
https://fiddle.sencha.com/#view/editor&fiddle/21en

关于javascript - 如何设置自定义组件模板并传递模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44531332/

相关文章:

Javascript 用按钮触发请求?

javascript - 我怎样才能用这个 axios 代码实现拦截器

javascript - 如何将数组中的字符串视为日期

javascript - 控制 iPhone/iPad 上的视频覆盖

javascript - 获取组织结构图 : Nodes whose parent haven't been defined

javascript - ExtJS 4 - 实现其他用户扩展/插件?

javascript - 我应该在 Sencha-Touch 2 中的什么地方放置 Google map 逻辑?多重标记

extjs - 如何将 xtype 值存储为字符串数组 CQ5/AEM

forms - 当 trackResetOnLoad 为真时,Ext.form.Basic 如何重置字段?

javascript - 将选定的记录加载到模态窗口