我有一种称为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.$
让我可以访问所有子组件。它目前只允许我访问outerscroll
和list
。那是为什么?
修改
很明显,当使用List
类型时,我可以访问所有子组件(特别是在我重写的create enyo函数中)。我很困惑什么时候它适合做某些事情。就像我假设this.$
可以在任何地方使用。绝对不是这样。
答案 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);
}
},