2

为什么在组件中

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){

    }
});

this.$ 包括所有组件,即使是嵌套顺序为 2 的组件

我期望 this.$.matrixTable.$.tr1 但我有 this.$.tr1

4

2 回答 2

2

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

此外,您应该始终避免深入到两个层次。换句话说, this.$.matrixTable.$.tr1 将是错误的形式。创建属性或添加函数以返回值。

于 2012-02-08T23:59:12.143 回答
1

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

因此,要从“Matrix”到达“tr1”,您可以采用两种方式:

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

同样,要从“tr1”到达“Matrix”,您可以执行以下操作:

this.$.tr1.owner或者this.$.tr1.parent.parent

这样,无论您的组件嵌套多深,所有者都将始终是定义该组件的那种。

于 2013-06-21T01:34:55.913 回答