如何访问enyo类的儿童组件?

时间:2013-09-05 14:22:39

标签: javascript enyo

我有一种称为RobustList,它扩展了Control,它有以下组件:

components: [
    {name: "outerScroll",kind: "Scroller",touch: true,classes: "enyo-fit",components: [
            {name: "list",kind: "Repeater",onSetupItem: "setupItem",components: [
                    {name: "item",components: [
                            {name: "index",style: "display:none;"}
                    ]}, 
                    {name: "empty",fit: true,content: ""}, 
                    {name: "loadmore",fit: true,content: "Load More Items"}
                ]}
        ]}

]

现在我正在捕获onSetupItem事件,在该函数中,我正在尝试访问子组件。我虽然遇到了问题。我假设说this.$让我可以访问所有子组件。它目前只允许我访问outerscrolllist。那是为什么?

修改


很明显,当使用List类型时,我可以访问所有子组件(特别是在我重写的create enyo函数中)。我很困惑什么时候它适合做某些事情。就像我假设this.$可以在任何地方使用。绝对不是这样。

2 个答案:

答案 0 :(得分:3)

在回答您的问题时,是的,如果它是一个List,您可以使用this.$.访问onSetupItem中任何RobustList的子项。请查看此处的文档:https://github.com/enyojs/enyo/wiki/Lists。由于它的flyweight模式,List中只有一个有效的控件集,因此您可以直接通过名称引用它们。

您不希望使用this.$.来访问Repeater中的项目,因为有许多组件副本(每行一个)。使用传入的引用(例如var item = inEvent.item;)来访问行模板中的项目。

我还注意到你在列表中的几个组件上使用'fit:true'。 FittableColumn / FittableRow中只能有一个fit:true组件。这些都不是合适的,所以它不可能做你想要的。

答案 1 :(得分:0)

setupItem:function(inSender,inEvent){
    var data = this.data;
    if(data){
        var item = inEvent.item;
        var row = data[inEvent.index];
        item.$.loadmore.set('content',row.content);
    }
},