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を期待していますが、これがあります。$。tr1

4

2 に答える 2

2

それらをMatrixの種類の一部として宣言したため、EnyoはそれらをすべてMatrixの種類が所有するようになります。説明したようにそれらを所有したい場合は、MatrixTableの種類を独自の別の種類に分割する必要があります。そのカプセル化を強制したい場合は、それを非表示にする種類を作成する必要があります。

さらに、1つの種類に2つのレベルを深く入れることは常に避けてください。つまり、this。$。matrixTable。$。tr1は不適切な形式になります。プロパティを作成するか、関数を追加して値を返します。

于 2012-02-08T23:59:12.143 に答える
1

enyoでは、所有者チェーンと親子チェーンの2つのチェーンに注意する必要があります。「matrixTable」は「tr1」の親ですが、「tr1」の所有者は「Matrix」です。

したがって、「Matrix」から「tr1」に到達するには、次の2つの方法があります。

this.$.tr1またはthis.children[3].children[0]

同様に、「tr1」から「Matrix」にアクセスするには、次のようにします。

this.$.tr1.ownerまたthis.$.tr1.parent.parent

このように、コンポーネントがどれほど深くネストされていても、所有者は常にコンポーネントが定義されている種類になります。

于 2013-06-21T01:34:55.913 に答える