Enyo中创建和渲染函数之间的场景差异

时间:2015-01-07 00:35:44

标签: javascript enyo

我在解决问题的过程中遇到了这种情况。考虑以下场景,提供了一个jsfiddle链接:

http://jsfiddle.net/fp5Lt7zx/1/

enyo.kind({
name:'base',
components:[
    {name:'button', kind:'moon.Button'}
],
create: function(){
    this.inherited(arguments);
    this.$.button.createComponent({
        name:'tag',
        classes:'list-recording-tag',
        components: [{
                content: "NEW",
                classes: "list-recording-tag-font"
        }]
    });
}
});
new base().renderInto(document.body);

这很好用,但问题出现的时候,我尝试在渲染函数中给出它,而不是编写create中给出的功能。以下是具有相同功能的渲染函数的链接。

http://jsfiddle.net/esoyhrh7/

使用渲染功能,动态创建'标记'组件不会呈现。因此,要强制渲染,我必须添加这行代码

this.$.button.$.tag.render(); //this way is not recommended though

为什么需要在渲染功能中强制渲染标记组件,而不是在创建功能中。除此之外,他们之间还需要考虑哪些差异呢?

1 个答案:

答案 0 :(得分:2)

如果向已渲染的控件添加控件(就像在渲染函数中执行此操作时那样),则必须强制浏览器重绘,因此需要调用新控件上的.render()。如果将它保留在create中,则组件在呈现其包含控件之前构造,因此在它出现时就会存在。