2012-02-08 25 views
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){ 

    } 
}); 

這一點。$包括所有組件,甚至是那些嵌套順序2

我希望 這一點。$。matrixTable $。tr1 但我有 this。$。tr1

回答

2

因爲您將它們聲明爲Matrix類型的一部分,Enyo將使它們全部屬於Matrix類型。如果你希望它們像你所描述的那樣被擁有,那麼你需要將MatrixTable類型分成它自己獨立的類型。如果你想強制封裝,那麼你需要創建一種來隱藏它。

此外,你應該總是避免將兩個層次深入到一種。換句話說,這個。$。matrixTable。$。tr1將會是不好的形式。製作屬性或添加函數以返回值。

+0

非常感謝你 – MrBii 2016-02-22 06:42:53

1

在enyo中,您需要了解兩條連鎖:所有者鏈與父母子鏈。 雖然「矩陣表」是「tr1」的父項,「tr1」的所有者是「矩陣」。

所以去「TR1」,從「黑客帝國」,你可以有兩種方式:

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

同樣,去「黑客帝國」,從「TR1」你可以這樣做:

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

這樣一來,無論多麼深的嵌套是你的組件,主人總是會在其中分量定義的那種。

+0

非常感謝。這。$。tr1或this.children [3] .children [0], – MrBii 2016-02-22 06:43:30

+0

歡迎您! – 2016-02-22 09:54:30

相關問題