Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Как поменять frame у компонента grid? (https://javascript.ru/forum/extjs/28290-kak-pomenyat-frame-u-komponenta-grid.html)

khusamov 14.05.2012 03:57

Как поменять frame у компонента grid?
 
У grid-а есть конфиг frame. Я его выставляю как-то при создании grid-а. И потом, хочу его изменить. Делаю как по инструкции сказано:

grid.setFrame(false)


И не тут-то было. Такого метода нету-с.

И никакого иного метода, который помог бы поменять это свойство тоже нету. Или не нашел.

Кто знает как поменять значение этого поля?

nekto_O 14.05.2012 14:08

Цитата:

Сообщение от khusamov
Делаю как по инструкции сказано:

где такое сказано?
Цитата:

Сообщение от khusamov
И не тут-то было. Такого метода нету-с.

в доке нет, но костыль то всегда можно создать))
например:
setFrame: function(v) {
        if(v === this.frame) return;
        this.frame = v;
        var ui = 'default'; // TO-DO
        this.setUI(ui + (v ? '-framed' : ''));
}

В 4.1 работать будет правельно, в версиях ниже - коряво, но если метод setUi доработать (по примеру 4.1) то проблем вообще не будет.

khusamov 14.05.2012 17:07

Цитата:

Сообщение от khusamov "Делаю как по инструкции сказано:"
где такое сказано?
Вот тут:
http://docs.sencha.com/ext-js/4-0/#!/guide/class_system

Цитирую:

Цитата:

2. Configuration
In Ext JS 4, we introduce a dedicated config property that gets processed by the powerful Ext.Class pre-processors before the class is created. Features include:

Configurations are completely encapsulated from other class members
Getter and setter, methods for every config property are automatically generated into the class' prototype during class creation if the class does not have these methods already defined.
An apply method is also generated for every config property. The auto-generated setter method calls the apply method internally before setting the value. Override the apply method for a config property if you need to run custom logic before setting the value. If apply does not return a value then the setter will not set the value. For an example see applyTitle below.

nekto_O 14.05.2012 18:09

а причем здесь это?
неужели вы думаете что если даже не указывать свойство, конструктор создаст соответствующие геттер и сеттер? При чем именно в нужном виде?
Хорошо, допустим мы укажем нужное нам свойство в конфиге:
Ext.define('MyPanel', {
    extend: 'Ext.panel.Panel',
    config: {
         frame: true
    }
});

При создании объекта у него будут сгенерированы методы getFrame() и setFrame().
var panel = Ext.create('MyPanel', {
    renderTo: Ext.getBody()
});
console.log(panel.getFrame); // 'function'
console.log(panel.setFrame); // 'function'

Да, мы видим что они действительно созданы. Геттер как и положено возвращает текущее значение свойства, сеттер устанавливает заданное (параметром). Но вот ведь незадача (!) внешний вид панели ничуть не изменится при вызове setFrame. Почему?
Потому что он определяется во время инициализации (в зависимости от значения свойства frame присваиваются классы соответствующим компонентам). И чтобы динамически изменить внешний вид, как вы хотите, нужно как раз изменить классы компонентов и сгенерированный метод setFrame вам нисколько не поможет.

khusamov 14.05.2012 18:37

Цитата:

Потому что он определяется во время инициализации (в зависимости от значения свойства frame присваиваются классы соответствующим компонентам). И чтобы динамически изменить внешний вид, как вы хотите, нужно как раз изменить классы компонентов и сгенерированный метод setFrame вам нисколько не поможет.
Да и для того, чтобы динамически все менялось у Ext задуман еще специальный метод, а именно apply* (в нашем случае applyFrame()). Так что логично думать, что setFrame сделает все что нужно... Но он этого не делает.

Я уже на многие такие конфиги наткнулся. Наверное методы apply* для них не прописаны еще. Типа потом допишут.

За костыль спасибо, мне еще придется разобраться с методом setUI, назначение которого мне не совсем пока ясно. Придется пока на костылях ходить, ждать когда они эти apply* допишут.

khusamov 14.05.2012 18:57

Цитата:

Да, мы видим что они действительно созданы. Геттер как и положено возвращает текущее значение свойства, сеттер устанавливает заданное (параметром). Но вот ведь незадача (!) внешний вид панели ничуть не изменится при вызове setFrame. Почему?
Кстати, вы какой-то странный пример тут привели. Вы тут сделали свой собственный класс, где объявили в конфиге frame.

А я имел ввиду класс, который создан в Ext. В нем как раз метода setFrame даже не определен почему-то, хотя конфиги вроде как есть по документации.


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