Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   есть ли готовый метод? (https://javascript.ru/forum/extjs/50160-est-li-gotovyjj-metod.html)

skrudjmakdak 14.09.2014 19:53

есть ли готовый метод?
 
вообщем написал вот такую функцию:

function is (className, object) {
var cl = Ext.ClassManager.get(Ext.getClassName(object)) || {};
  do {
    if (cl.$className === className)
      return true;
  } while (cl = cl.superclass);
  
  return false;
}


аргументами которой является имя класса и объект. функция проверяет, есть ли в наследниках данного объекта данный класс. например:

мы создаем вот такие экземпляры классов:
var myGrid = Ext.create('Ext.grid.Panel', {/*аргументы, не важно какие*/});
var myPanel = Ext.create('Ext.form.Panel', {/*аргументы, не важно какие*/});

если мы посмотрим на их родителей то увидим вот такую иерархию для первого:

Ext.Base
Ext.AbstractComponent
Ext.Component
Ext.container.AbstractContainer
Ext.container.Container
Ext.panel.AbstractPanel
Ext.panel.Panel
Ext.panel.Table
Ext.grid.Panel

и вот такую для второго:
Ext.Base
Ext.AbstractComponent
Ext.Component
Ext.container.AbstractContainer
Ext.container.Container
Ext.panel.AbstractPanel
Ext.panel.Panel
Ext.form.Panel


так вот, если мы запустим мою функцию:
is('Ext.panel.Table', myGrid); //вернет true, т.к. в иерархии есть этот класс
is('Ext.panel.Table', myPanel); //вернет false, т.к. в иерархии нет этого класса

is('Ext.panel.Panel', myGrid); //вернет true
is('Ext.panel.Panel', myPanel); //вернет true


вопрос в том, есть ли стандартная такая функция у extjs? чет я не найду))

siber-biber 15.09.2014 05:18

а instanceof не подойдет?
myGrid instanceof Ext.panel.Table

skrudjmakdak 15.09.2014 08:11

мдяя)) отдыхать надо))

Pavel M. 15.09.2014 08:49

конечно instanceof сработает

<!DOCTYPE html>
<html>
<head>
    <title>demo</title>
    <script src='//cdn.sencha.io/ext-4.2.0-gpl/ext-all.js'></script>
    <link rel="stylesheet" href="//cdn.sencha.io/ext-4.2.0-gpl/resources/css/ext-all.css">
    <script>

     
    Ext.onReady(function() {

       Ext.define('User', {
          extend: 'Ext.data.Model',
          fields: [ 'name', 'phone' ]
      });
      
      var userStore = Ext.create('Ext.data.Store', {
          model: 'User',
          data: [
              { name: 'Lisa', phone: '555-111-1224' },
              { name: 'Bart', phone: '555-222-1234' }
              
          ]
      });
      
      var myGrid = Ext.create('Ext.grid.Panel', {
          renderTo: Ext.getBody(),
          store: userStore,
          width: 300,
          title: 'Application Users',
          columns: [
              {
                  text: 'Name',
                  width: 100,
                  dataIndex: 'name'
              },{
                  text: 'Phone Number',
                  flex: 1,
                  dataIndex: 'phone'
              }
          ]
      });
      
      alert(myGrid instanceof Ext.panel.Table); // true
      alert(myGrid instanceof Ext.panel.Panel); // true
      
      alert(myGrid instanceof Ext.button.Button); // false
      
        
    });                    
 
    </script>
</head>
  <body></body>
</html>


Часовой пояс GMT +3, время: 23:08.