Nano Hash - криптовалюты, майнинг, программирование

Extjs 4 создает ajax-запрос ширины элементов панели инструментов

Мне нужно создать панель инструментов, которая вычисляет свои элементы из запроса ajax. посмотрите на обе функции initComponent и buildItems, я не получаю тот же результат для элементов toolbar.items, даже запуск запроса ajax выполняется правильно, как вы видите в методе builsItems после вызова console.log. пожалуйста, помогите (я новичок, я использую Extjs 4) Большое спасибо.

Ext.define('Dev.view.layout.Toolbarapp',{
   extend:'Ext.toolbar.Toolbar',
   alias :'widget.toolbarapp',
   border:false,
   height:35,
   initComponent:function(){
           this.items=[];
           Ext.Ajax.disableCaching=false;
           Ext.Ajax.request({
                        url : '/gdev/jsontest',
                        callback:this.buildItems,       
                        scope:this
           });  
       console.log(this.items); //THE RESULT IS []    
       this.callParent(arguments);
   },   
   buildItems:function(options, sucess, response){      
        if (sucess==true) {
            var listItems=[];
            var applist=Ext.JSON.decode(response.responseText);
            Ext.each(applist, function(rec){
                   listItems.push({'text'     :rec.appid,
                                   'iconCls'  :rec.iconcls,
                                   'operation':rec.appcode
                                  }
                                );                     
                 });
            this.items=listItems;   
            console.log(this.items); //THE RESULT IS [Object { text=100,      
    iconCls="appsysadmin", operation="appsysadmin"}, Object { text=101, 
    iconCls="appmailxe", operation="appmailxe"}]
        }
        else {
            Ext.MessageBox.alert('Error','not found');
        }

   }
   });

Ответы:


1

Назначение компонентов нотации объекта this.items работает только до callParent в initComponent.

После этого элементы уже инициализированы, ext не подхватит в них изменения. Вы должны использовать компонента панели инструментов. вместо этого добавьте метод.

В вашем методе buildItems вместо создания массива просто вызовите add с вашим компонентом нотации объекта:

var me = this;
Ext.each(applist, function(rec){
                   me.add({'text'     :rec.appid,
                                   'iconCls'  :rec.iconcls,
                                   'operation':rec.appcode
                                  }
                                );                     
                 });

Я не проверял это, но я уверен, что так и сделал (из головы)

Изменить: добавлена ​​переменная для области видимости

12.10.2011
  • Я сделал это, но получаю сообщение об ошибке: this.add не является функцией. Это логично, потому что this внутри каждого означает изменение области видимости, поэтому я объявил перед Ext.each переменную, подобную следующей: var listitems=this, и я заменил this.add на listitems.add. все работает нормально. ТАКОЕ БОЛЬШОЕ СПАСИБО ПАРЕНЬ. 13.10.2011
  • @ ора-271071. Да, справедливое замечание. Это вопрос масштаба. это означает что-то еще в каждом обратном вызове. Способ extjs обычно заключается в создании переменной me и присвоении ей этого значения, после чего me становится доступным в любой вложенной функции. Я изменил код. 13.10.2011
  • @ ора-271071. Вы также должны принять один из ответов (галочка слева от одного из ответов) 13.10.2011

  • 2

    Почему бы не воспользоваться загрузчиком компонентов? См.: http://dev.sencha.com/deploy/ext-4.0.2a/examples/component-loader/component-loader.html

    13.10.2011
  • Большое спасибо за ваше участие. на самом деле, это отличная идея — использовать неявный ajax-запрос для компонента (в будущем я планирую использовать эту функцию). но на данный момент ответ номер 1, соответствующий моей потребности, это именно то, что я хочу. БОЛЬШОЕ СПАСИБО ДЕВУШКА ЗА ОТВЕТ. 13.10.2011

  • 3

    Ваш первый вызов console.log находится за пределами вашего обратного вызова, и поэтому он вызывается до того, как запрос Ajax когда-либо завершится.

    С вашим вторым вызовом console.log он вызывается внутри обратного вызова... который инициируется после завершения запроса Ajax. По сути, вам нужно выполнить всю свою работу в обратном вызове, если вы ожидаете использовать данные, возвращенные из запроса Ajax.

    12.10.2011
  • Это не совсем ответ на вопрос 13.10.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..