2013-07-10 3 views
0

Я пытаюсь получить доступ к функции из инициализации компонента. Новый для Sencha Touch/Ext.js, поэтому не уверен, как работает область. У меня есть «спиновые» слушатели в «контроле», которые, похоже, работают хорошо, когда они увеличиваются.Метод доступа Сенча Touch в родительском представлении

упрощенный код:

Ext.define('App.view.CreateChallenge', { 
    extend: 'Ext.Container', 
    fullscreen: true, 
    xtype: 'CreateChallenge', 
    config:{ 
     items[ 
      xtype: 'spinnerfield', 
      itemId: 'mySpin', 
      initialize:function(){ 
       App.view.Challenge.doThis(); 
      } 
     ], 
    control:{ 
     '#mySpin' : { 
      spin: 'doThis' 

     } 
    } 
    }, 
    doThis:function(){ 
     console.log('dooing this'); 
    } 
}); 

Спасибо, Стив

ответ

2

Прежде всего, вы не должны переопределить метод initialize в блоке конфигурации, правильное место для этого в Ext.define.

Затем, в initialize, вы можете позвонить по телефону App.view.CreateChallenge.doThis(). Но это просто обычная функция, ее область действия - глобальный объект window, поэтому у вас нет доступа к объекту App.view.CreateChallenge.

Чтобы найти ссылку на контейнер со своих детей, вы можете использовать Ext.Component.up(). В вашем случае это будет выглядеть так:

initialize: function() { 
    … 
    this.up('CreateChallenge').doThis(); // find container by xtype then call its method 
} 

Мы еще не с вами! Если вы попробуете, вы получите undefined от this.up(…). Это связано с тем, что контейнер не завершен, пока его дети инициализируются. Итак, если вам нужна ссылка контейнера в методе initialize, вам нужно подождать, пока контейнер не будет готов, например, событие painted.

Тогда вы будете в конечном итоге что-то выглядит следующим образом:

initialize: function() { 
    … 
    this.on('painted', function() { 
     this.up('CreateChallenge').doThis(); // find container by xtype then call its method 
    }, this); 
} 
+0

Спасибо @Ye Лю. Спасибо за отзыв о переписывании инициализации. Я пытаюсь понять делегатов, контроллеров, ссылок и головокружение, пытаясь обработать все это. Покраска действительно помогает, так как я получаю dom, а не ошибки. – daxiang28

0

Я бы просто использовать

VIEW/This .getParent() 
+0

Спасибо @Fawar. Я начинаю понимать, что есть два типа обходов с ext/sencha: dom и component. – daxiang28

+0

Нет проблем. Исправьте меня, если я ошибаюсь, вы пытались достичь элемента DOM Parent, а не компонента Parent, это так? – Fawar

+0

Компонентный родитель ... но теперь я знаю оба. – daxiang28