Enyo层次结构。这个。$包括所有组件,甚至包含嵌套顺序2的组件

时间:2012-02-08 07:27:50

标签: enyo

为什么在组件中

var matrix = new enyo.Control({
    name:"Matrix",
    tag: "div",
    classes : 'strategies',
    /*handlers: {
        init: "initHandler"
    },*/
    components: [
        { tag: "div", classes: "blankblock", content: '&nbsp' },
        { 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

2 个答案:

答案 0 :(得分:2)

因为您将它们声明为Matrix类型的一部分,所以Enyo将使它们全部归Matrix类所有。如果您希望它们像您所描述的那样拥有,那么您需要将MatrixTable类型分解为它自己独立的类型。如果要强制执行该封装,则需要创建一种隐藏它的类型。

此外,你应该总是避免将两个级别深入到一种类型中。换句话说,这个。$。matrixTable。$。tr1将是糟糕的形式。创建属性或添加函数以返回值。

答案 1 :(得分:1)

在enyo中,您需要了解两个链:所有者链与父子链。 “matrixTable”是“tr1”的父级,“tr1”的所有者是“Matrix”。

所以从“Matrix”到“tr1”,你可以采取两种方式:

this.$.tr1this.children[3].children[0]

同样,要从“tr1”到“Matrix”,你可以这样做:

this.$.tr1.ownerthis.$.tr1.parent.parent

这样,无论您的组件嵌套有多深,所有者将始终是组件定义的类型。