Эньо иерархия. this. $ включает все компоненты, даже те, которые имеют порядок вложенности 2 - PullRequest
2 голосов
/ 08 февраля 2012

Почему в компоненте

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

Я ожидаю этого. $. MatrixTable. $. Tr1, но у меня есть это.$ .tr1

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Поскольку вы объявили их частью типа Matrix, то Enyo будет владеть ими как Matrix.Если вы хотите, чтобы они принадлежали, как вы описали, то вам нужно разбить вид MatrixTable на отдельный отдельный вид.Если вы хотите применить эту инкапсуляцию, вам нужно создать вид, чтобы скрыть ее.

Кроме того, вы всегда должны избегать погружения в два уровня.Другими словами, это. $. MatrixTable. $. Tr1 было бы плохой формой.Создайте свойства или добавьте функции для возврата значений.

1 голос
/ 21 июня 2013

В enyo вам необходимо знать о двух цепочках: цепочка владельцев и цепочка родитель-потомок.В то время как «matrixTable» является родителем «tr1», владельцем «tr1» является «Matrix».

Таким образом, чтобы добраться до «tr1» из «Matrix», вы можете пойти двумя путями:

this.$.tr1 или this.children[3].children[0],

аналогично, чтобы попасть в «Матрицу» из «tr1», вы можете сделать:

this.$.tr1.owner или this.$.tr1.parent.parent

Таким образом, независимо от того, насколько глубоко вложены ваши компоненты, владельцем всегда будет тот тип, в котором определен компонент.

...