Sencha 2.x MVC:按id获取元素

Sencha 2.x MVC: Get element by id

本文关键字:id 获取 元素 MVC Sencha      更新时间:2023-09-26

我刚开始使用Sencha framework 2.x。这是我的应用程序:

app/app.js

Ext.Loader.setConfig({
  enabled: true
});
Ext.application({
  name: 'App',
  controllers: ['Generators'],
  models: [],
  stores: [],
  views: ['Main', 'Generator'],
  launch: function() {
    Ext.create('App.view.Main');
  }
});

app/view/Main.js

Ext.define('App.view.Main', {
  extend: 'Ext.NavigationView',
  requires: [
    'App.view.Generator'
  ],
  config: {
    fullscreen: true,
    items: [
      {
        xtype: 'generatorview'
      }
    ]
  }
});

app/view/Generator.js

Ext.define('App.view.Generator', {
  extend: 'Ext.Container',
  xtype: 'generatorview',
  id: 'generator',
  config: {
    layout: 'vbox',
    items: [
      {
        xtype: 'panel',
        html: 'My message: <a id="xxxSet">Set</a> :: <span id="xxxMsg">...</span>',
        flex: 1
      },
      {
        dock: 'bottom',
        xtype: 'toolbar',
        items: []
      }
    ]
  }
});

app/controller/Generator.js

Ext.define('App.controller.Generators', {
  extend: 'Ext.app.Controller',
  config: {
    refs: {}
  },
  init: function() {
    this.control({
      '#xxxSet': { // QUESTION1
        tap: 'setMyMessage'
      }
    });
  },
  setMyMessage: function() {
    '#xxxMsg'.html('Set this message'); // QUESTION2
  }
});

正如你所看到的,我在最后一部分(控制器)提出了问题。

  • 问题1:如何为元素设置tap函数(#xxxSet)在视图中定义为HTML内容
  • 问题2:我如何设置将视图中定义的元素(#xxxMsg)消息为HTML内容

xxxSet=按钮的id

xxxMsg=消息持有者的id

Thx!

您可以使用Ext#get(它接受一个字符串,即id),它将返回Ext.dom.Element的一个实例。这样,您可以使用on方法添加侦听器(很像control),然后使用setHtml方法更新内容。

init: function() {
    Ext.get('xxxSet').on({
        tap: 'setMyMessage',
        scope: this
    });
},
setMyMessage: function() {
    Ext.get('xxxMsg).setHtml('Hello');
}

如果使用itemId,则无法使用Ext.get()访问它。你可以试试Ext.ComponentQuery.query()而不是那样。

init: function() {
Ext.ComponentQuery.query('#xxxSet').on({
    tap: 'setMyMessage',
    scope: this
  });
},
setMyMessage: function() {
 Ext.ComponentQuery.query('#xxxMsg).setHtml('Hello');
}