Подскажите, пожалуйста, как установить значение поля, сделав запрос на сервер?
        Есть поле в админке на странице компонента:
Есть процессор, который получает данные из базы. Как из ExtJS обратиться к этому процессору и результат запроса вставить в value этого поля?
    
    
                                                                                
            ModXSaver.panel.CodeEditor = function(config) {
    config = config || {};
    Ext.apply(config,{
        id: 'modxsaver-texteditor'
        ,border: false
        ,baseCls: 'modx-formpanel'
        ,cls: 'container'
        ,items: [{
            html: '<p>'+_('xsaver_desc')+'</p>'
            ,border: false
            ,bodyCssClass: 'panel-desc'
        },{
            id: 'mod-xsaver-texteditor'
            ,xtype: 'modx-texteditor'
            ,height: 300
            ,width: '99%'
            ,value: _('xsaver_default_value')
        }]
    });
    ModXSaver.panel.CodeEditor.superclass.constructor.call(this,config);
};Есть процессор, который получает данные из базы. Как из ExtJS обратиться к этому процессору и результат запроса вставить в value этого поля?
Комментарии: 9
MODx.Ajax.request({
	url: '/assets/connector.php'
	,params: {
		action: 'mgr/my/processor'
	}
	,listeners: {
		success: {fn: function(response) {
			console.log(response);
		}, scope: this}
	}
})
                Почему-то если вместо console.log указать return, никакое значение не возвращается.
                    ...
{
     id: 'mod-xsaver-codeeditor'
    ,xtype: 'modx-texteditor'
    ,height: 300
    ,width: '99%'
    ,value: this.getCodeEditorValue()
}
...
getCodeEditorValue:function(){
    MODx.Ajax.request({
        url: '/assets/connector.php'
        ,params: {
            action: 'getcode'
        }
        ,listeners: {
    		success: {fn: function(response) {
                    return response;
    		}, scope: this}
    	}
    });
}
                Это асинхронный запрос. Твой скрипт заканчивает работать раньше, чем придет ответ от сервера, поэтому никакой return работать не будет.
В методе success ты можешь получить нужный объект и сделать с ним что-то, а return работает только в синхронных запросах.
                    В методе success ты можешь получить нужный объект и сделать с ним что-то, а return работает только в синхронных запросах.
                Должно работать примерно так:
Можно указать и id всей формы, чтобы выставить значения сразу для всех полей:
                    MODx.Ajax.request({
	url: '/assets/connector.php'
	,params: {
		action: 'mgr/my/processor'
	}
	,listeners: {
		success: {fn: function(response) {
			var el = Ext.getCmp('mod-xsaver-codeeditor');
			el.setValue(response.value);
		}, scope: this}
	}
});Можно указать и id всей формы, чтобы выставить значения сразу для всех полей:
var form = Ext.getCmp('mod-xsaver-form');
el.setValues(response.values);
                Спасибо большое! Так работает) Я пытался получить инпут с помощью getElementByID, поэтому не получалось)            
                    
                Так ты получишь элемент DOM, а не компонент Ext JS.
Для получения DOM у Ext есть Ext.get(), а Ext.getCmp() получает именно объект, у которого есть всякие полезные методы, типа setValue().
                    Для получения DOM у Ext есть Ext.get(), а Ext.getCmp() получает именно объект, у которого есть всякие полезные методы, типа setValue().
                подскажите пожалуйста:
суть: Создание textfield на лету при создание(редактирование) записи, т.е. При нажатии Добавить, всплывает окно в котором на лету созданные textfield, к примеру 3 штуки, а если это UPDATE то и их значение соответственно, помимо этого есть поля не созданные на лету.
При сохранение отправляется в процессор, в котором поля созданные на лету колбасятся в JSON и записыватся в 1 колонку БД.
Вот столкнулся сразу же с проблемой
Есть процессор, в нем получаю массив полей
Подскажите как быть с запросом к процессору, может в плагине раньше получать, но тогда я не смогу получить текущее value при апдейте.
                    суть: Создание textfield на лету при создание(редактирование) записи, т.е. При нажатии Добавить, всплывает окно в котором на лету созданные textfield, к примеру 3 штуки, а если это UPDATE то и их значение соответственно, помимо этого есть поля не созданные на лету.
При сохранение отправляется в процессор, в котором поля созданные на лету колбасятся в JSON и записыватся в 1 колонку БД.
Вот столкнулся сразу же с проблемой
Есть процессор, в нем получаю массив полей
foreach ($arr as $value) {
               $fields[] = array(
                    'xtype' => 'textfield',
                    'fieldLabel' => $value['code'],
                    'name' => $value['code'],
                    'id' => "config.id + '-".$value['code']."'",
                    'anchor' => "99%",
                    'allowBlank' => "false",
                    'value' => ''
                );
           }
	return $this->success('ok',$fields);Ext.extend(Trans.window.CreateItem, MODx.Window, {
    getFields: function (config) {
        var fieldsArr = '';
        MODx.Ajax.request({
            url: Trans.config.connectorUrl
            ,params: {
                action: "mgr/tr_data/get_fields",
                id_res: MODx.request.id,
                createAction: true
            } 
            ,listeners: {
                success: {fn: function(response) {
                    //console.log(response);
                    fieldsArr = response['object'];
                     console.log(fieldsArr+ 'success');
                }, scope: this}
            }
        });
        console.log(fieldsArr + ' - массив полей');
        return [{
            xtype: 'textfield',
            fieldLabel: _('trans_lang_name'),
            name: 'name',
            id: config.id + '-name',
            anchor: '99%',
            allowBlank: false,
        }, {
            xtype: 'textfield',
            fieldLabel: _('trans_lang_code'),
            name: 'code',
            id: config.id + '-code',
            allowBlank: false,
            anchor: '99%'
        }, {
            xtype: 'xcheckbox',
            boxLabel: _('trans_lang_active'),
            name: 'active',
            id: config.id + '-active',
            checked: true,
        }];
    },
    loadDropZones: function () {
    }
});
Ext.reg('trans-item-window-create', Trans.window.CreateItem);Подскажите как быть с запросом к процессору, может в плагине раньше получать, но тогда я не смогу получить текущее value при апдейте.
                Та же самая фигня, что и в моём коде.
JavaScript делает ассинхронный запрос и то, что указано внутри success выполняется после всего остального кода. Вот внутри этого success вам нужно заново найти окно (которое в этот момент уже будет открыто) и модифицировать его.
К сожалению, конкретных методов ExtJS для этого подсказать не смогу. Создайте отдельный вопрос конкретно под эту задачу — как в ExtJS обратиться к окну по его id и добавить в него полей. Надеюсь, вам помогут.
                    JavaScript делает ассинхронный запрос и то, что указано внутри success выполняется после всего остального кода. Вот внутри этого success вам нужно заново найти окно (которое в этот момент уже будет открыто) и модифицировать его.
К сожалению, конкретных методов ExtJS для этого подсказать не смогу. Создайте отдельный вопрос конкретно под эту задачу — как в ExtJS обратиться к окну по его id и добавить в него полей. Надеюсь, вам помогут.
                Все же хотелось бы получить массив и передать его функцию для создания полей, но похоже придется делать как ты говоришь и тут еще заний extJs придется набрать)
Тему создал modx.pro/help/9977/
                    Тему создал modx.pro/help/9977/
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    
            
 
             
                    
                    
                






