Разница в сценариях между функциями создания и рендеринга в 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

Почему необходимо принудительно отображать компонент тега в функции рендеринг, а не в функции create. Помимо этого, какие еще различия нужно учитывать между ними?


person Rakesh_Kumar    schedule 07.01.2015    source источник


Ответы (1)


Если вы добавляете элемент управления к уже обработанному элементу управления (как вы делаете, помещая его в отображаемую функцию), вы должны заставить браузер перерисовать, следовательно, необходим вызов .render() для нового элемента управления. Если вы оставите его в режиме создания, компонент будет создан до того, как будет отрисован содержащий его элемент управления, и, таким образом, он будет там, когда он будет создан.

person sugardave    schedule 08.01.2015