为什么在组件中
var matrix = new enyo.Control({
name:"Matrix",
tag: "div",
classes : 'strategies',
/*handlers: {
init: "initHandler"
},*/
components: [
{ tag: "div", classes: "blankblock", content: ' ' },
{ tag: "div", classes: "label1", content: 'Player A' },
{ tag: "div", classes: "label2", content: 'B' },
{ name:'matrixTable', tag: "table", components: [
{ name: 'tr1', tag: 'tr', components: [
{ tag: 'td', components: [{tag: 'input'}]},
{ tag: 'td', components: [{tag: 'input'}]}
]},
{tag: 'tr', components: [
{tag: 'td', components: [{tag: 'input'}]},
{tag: 'td', components: [{tag: 'input'}]}
]}
]} ,
{ name: 'addV', tag: "button", classes:'addV', content: "+", ontap: "addRow" },
{ name: 'addH', tag: "button", classes:'addH', content: "+", ontap: "addColl" }
],
addRow: function(inSource, inEvent){
this.$.matrixTable.createComponent
alert(this.$.matrixTable.$.toSource());
},
addColl: function(inSource, inEvent){
}
});
这个。$包括所有组件,甚至包含嵌套顺序2的组件
我期待 这一点。$。matrixTable。$。TR1 但是我有 此。$。TR1
答案 0 :(得分:2)
因为您将它们声明为Matrix类型的一部分,所以Enyo将使它们全部归Matrix类所有。如果您希望它们像您所描述的那样拥有,那么您需要将MatrixTable类型分解为它自己独立的类型。如果要强制执行该封装,则需要创建一种隐藏它的类型。
此外,你应该总是避免将两个级别深入到一种类型中。换句话说,这个。$。matrixTable。$。tr1将是糟糕的形式。创建属性或添加函数以返回值。
答案 1 :(得分:1)
在enyo中,您需要了解两个链:所有者链与父子链。 “matrixTable”是“tr1”的父级,“tr1”的所有者是“Matrix”。
所以从“Matrix”到“tr1”,你可以采取两种方式:
this.$.tr1
或this.children[3].children[0]
,
同样,要从“tr1”到“Matrix”,你可以这样做:
this.$.tr1.owner
或this.$.tr1.parent.parent
这样,无论您的组件嵌套有多深,所有者将始终是组件定义的类型。