1

メインビューで含むと宣言しました。それでは、コントローラーでアクセスする方法。ここにdemocontainerdemopanelがあります。では、アクセス方法。

    Ext.define('MyApp.view.Main', {
      extend: 'Ext.Panel',
      alias: 'widget.mainpage',


      config: {
        width: 710,
        margin: '10px auto 0',
        itemId: 'democontainer',
        layout: {
          type: 'hbox'
        },
        items: [
        {
          xtype:'container',
          cls:'wholeMenuWrap',
          margin: '65px 0 0 0',
          width: 175,

          items:[ 
....and
 {
    xtype: 'homepage',
    cls:'homepage-wrap',
    itemId: 'demopanel',
    layout: {
      type: 'fit'
    }
  },
  {
    xtype:'container',
    layout: 'vbox',
    margin: '65px 0 0 0',

    width: 185,
    items:[
    {
      xtype: 'titlebar',          
      cls:'roundedToolbar', 

このようにコントローラにアクセスしたいのですが、アクセスできません。

    config: {
        main:this,
        profile: Ext.os.deviceType.toLowerCase(),

       refs:{
       myContainer: 'mainpage',
       },
        control: {
          'mainpage': {
            activate: 'onActivate',
            itemtap: 'onItemTap',
            },
'mainpage textfield[itemId=searchBox]' : {
//clear the input text box
clearicontap : 'onClearSearch',
//on every key stroke
keyup: 'onSearchKeyUp'
},

.........

   onSearchKeyUp: function(searchField) {
   var container = this.up('#democontainer');
          var panel = container.down('#demopanel');
          panel.removeInnerAt(0);
          var submitWordBySearch = { xtype: 'searchplusfav' }; 
          panel.insert(0, submitWordBySearch);

このエラーが発生しています:

Uncaught TypeError: Object [object global] has no method 'up' 

誰でも私を助けてください。

新しいコードを追加しました:

    refs:{

         myContainer: 'mainpage',
         demoContainer2: '#democontainer', //same as demoContainer1
         demoContainer3:'#demopanel'
       },

...-------------
  onSearchKeyUp: function(searchField) {
 var container = this.getDemoContainer2();
           var panel = container.getDemoContainer3();
          panel.removeInnerAt(0);
          var submitWordBySearch = { xtype: 'searchplusfav' }; 
          panel.insert(0, submitWordBySearch);

取得エラー:

Uncaught TypeError: Object [object global] has no method 'demoContainer2' 

作業コード:

  onKeySubmitTap: function(dataview, index, target, record, e, options) 
  {
    var container = dataview.up('#democontainer');
    var panel = container.down('#demopanel');
    panel.removeInnerAt(0);
    var submitWordBySearch = { xtype: 'categorywordsdisplay' }; 
    panel.insert(0, submitWordBySearch);
  }
4

2 に答える 2

0

コントローラー内で使用this.up()しても、実際には何もしません。democontainer への参照を取得するには、クラスの で を宣言するのは役に立たないことを最初に認識する必要がありitemIdますconfig。これは、クラス インスタンスを宣言するときに実際に行う必要があります。#democontainerこれら2つは現在のクラス構成と同等であるため、基本的にすでに参照があります。

refs: {
    demoContainer1: 'mainpage',
    demoContainer2: '#democontainer' //same as demoContainer1
}

したがって、refすでに持っている を使用して、コントローラーで後でその参照を取得するには、次のようにしますthis.getMyContainer()

refs: {
    myContainer: 'mainpage',
},
....
onSearchKeyUp: function(field) {
    var container = this.getMyContainer();
    ....
}
于 2013-08-15T11:27:23.700 に答える