Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2018, 14:20
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Проблемы получения значений при открытии окна редактирования записи
Добрый день.
По нажатию на кнопку грида "Редактировать" не удается открыть форму для редактирования выбранной записи. Сама форма появляется, но значения полей пустые.
Грид:
var textField = { xtype: 'textfield'  };     
Ext.define('BookApp.view.BookList' ,{
    extend: 'Ext.grid.Panel',
    alias: 'widget.booklist',

    title: 'Library',
    store: 'BookStore',
    tbar: [{
                text: 'Добавить операцию',
                iconCls: 'fa-plus',
                //handler: 'onAddClick',
                action: 'onAdd'
            },{
                text: 'Редактировать',
                iconCls: 'fa-plus',
                //handler: 'onEditClick',               
                action: 'onEdit'
            },
 ....

Контроллер:
Ext.define('BookApp.controller.Books', {
    extend: 'Ext.app.Controller',

    views: ['BookList', 'Book', 'DoubleBookList'],//
    stores: ['BookStore','DoubleBookStore'],//
    models: ['Book', 'DoubleBook'],
    init: function() {
        this.control({
            //Нажатие на кнопку редактирования
            'booklist button[action=onEdit]': {
                click: this.editBook               
            },
        });
    },//Открытие окна редактирования записи
    editBook: function(grid, record){    
               
           var me = this,
           win = Ext.widget('bookwindow');
           console.log(record.data);
           win.down('form').loadRecord(record);     
   },
    clearForm: function(grid, record) {
        var view = Ext.widget('bookwindow');
        view.down('form').getForm().reset();
    }

});


В контроллере при клике button[action=onEdit] вызываю функцию onEdit. В самой функции record.data у меня выводит 'undefined' . Понимаю что проблема заключается в использовании метода 'click' который не
передает значения выбранной записи. Если переделать на событие itemdbclick для строки, то значения успешно передаются, но мне не подходит двойное нажатие на запись.
Необходимо сделать редактирование записи именно через окно.
Подскажите, какое событие необходимо использовать что бы значения полей передавались в форму редактирования или если кто может, поделитесь полезным примером.
Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2018, 10:16
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

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

1. Скрипач this.control не нужен. Заберите action, добавьте хендлер: handler: 'editBook'.
2. Вы неправильно предполагаете что в хендлер придет грид и рекорд. Вы получите кнопку, и надо будет найти грид, а из него - выбранную строку.
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2018, 10:19
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Да, насчет первого пункта. Я заметил что вы используете Controller, а не ViewController. Возможно выбор метода control связан с этим? В любом случае я бы перешел на вьюконтроллеры если есть возможность, Сенча так и рекомендует.
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2018, 15:37
Аспирант
Отправить личное сообщение для Ambassador Посмотреть профиль Найти все сообщения от Ambassador
 
Регистрация: 12.11.2015
Сообщений: 68

Сделал так:
Ext.define('BookApp.view.BookList' ,{
    extend: 'Ext.grid.Panel',
    alias: 'widget.booklist',

    title: 'Library',
	store: 'BookStore',
	tbar: [{
                text: 'Добавить',
                iconCls: 'fa-plus',
                handler: function() {
				    onAdd(this.up('booklist')); 
				}        
               
            },{
                text: 'Редактировать',
                iconCls: 'fa-plus',
                handler: function() {
				    onEdit(this.up('booklist')); 
				}
				       
                
            }
.....
});

function onEdit(theGrid) {
	
	if (theGrid.getSelectionModel().hasSelection()) {    
        var record = theGrid.getSelectionModel().getSelection();        
        var me = theGrid,
       	win = Ext.widget('bookwindowedit');     	
       	win.down('form').loadRecord(record[0]); 		
   		}
	    else {
	        alert('Необходимо выбрать запись для редактирования!');
	    }
	}

Работает, но насколько так правильно делать?
Ответить с цитированием
  #5 (permalink)  
Старый 11.09.2018, 10:19
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

На мой взгляд, правильнее делать onEdit методом класса BookList. Если же он вызывается из нескольких классов, назовите более понятно, например editBook. Как правило хорошего тона, сделайте свой метод для запуска редактора вместо "win.down('form').loadRecord(record[0])". Например замените на "win.editBook(record)". Еще можно научить редактор понимать конфиги и задавать модели прямо там:
Ext.widget('bookwindowedit',{
  record: bookRecord
})

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как указать title при открытии окна через window.open для chrome milvic Opera, Safari и др. 4 15.01.2011 15:18
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
Проблема при подстановке значений royksopp Общие вопросы Javascript 1 11.07.2010 18:20
Вывод данных единожды, при открытии окна? Ggorsh Events/DOM/Window 1 28.04.2009 01:04
как при открытии окна закрыть предыдущее Евдокимова Events/DOM/Window 3 16.09.2008 17:12