02.07.2012, 19:19
|
Новичок на форуме
|
|
Регистрация: 27.06.2012
Сообщений: 8
|
|
Не работает push! Динамическая вставка
Ребята спасайте, 5 день мучаюсь!!!
Ext.define("App.module.Calendar", {
extend : "Ext.grid.Panel",
requires : ["App.models.System", 'App.models.WorkType'],
store : null,
title : 'Календарь',
iconCls : "calendar16",
id: 'tsl',
dockedItems: [],
initComponent : function () {
this.dockedItems = [
{
xtype:'toolbar',
id: 'ttl',
dock:'top',
renderTo: document.body,
items:[ Какой то код и выдов me.head1()]
}
],
head1 : function () {
this.dockedItems.push(Ext.create('Ext.grid.Panel', {
columns: [
{ header: '<b>Кол-во работ :</b>', dataIndex: 'name' },
{ header: '<b>2</b>', dataIndex: 'email', width : 27, align: 'center' },
{ header: '<b>5</b>', dataIndex: 'phone', width : 27, align: 'center' },
{ header: '<b>0</b>', dataIndex: 'phone', width : 27, align: 'center' }
]
//renderTo: Ext.getBody()
}))
}
)
},
Когда я в initComponent делаю this.dockedItems.push все соответственно работает, но когда в head1, ни чего не работает!!
Вопрос почему push не работает в функции head1? ( this.dockedItems.push is not a function)
add ошибок вроде не выдает, но ничего не изменяется. Может нужен рендер? как его реализовать?
this.dockedItems.items.push в head1 тоже ошибок не дает, но нечего не меняет!
insert вставляет, но просто полоску(грид не работает, даже если явно указать ширину и высоту, будет просто квадрат)!!
Как можно вставить грид? выручайте ребята!
|
|
02.07.2012, 19:44
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Какого хрена me.head1() у тебя делает в items если он нечего не возвращает.
И где обьявлен me ???
items:[ Какой то код и выдов me.head1()] - эту строчку надо бы поподробнее расписать
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 02.07.2012 в 19:56.
|
|
03.07.2012, 00:47
|
Новичок на форуме
|
|
Регистрация: 27.06.2012
Сообщений: 8
|
|
var me = this
это выше, я просто не указал, судь не в этом, главное что функция вызываеться, в items есть combobox, там linester:select вызывает head1
ты намекаешь на то что надо добавить return в head1?
|
|
03.07.2012, 07:01
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Судя по этому пример items:[ Какой то код и выдов me.head1()]
me.head1() - находитя внутри обьявления массива. Обычно когда вставляют вызов функции в массив пдразумевают что она вернёт в него значение.
z=[ f(1), f(2) ];
function f(x){ return x*10; }
alert(z);//10,20
Странно в объявление массива, вставлять вызов функции просто так
Внутри функции head1, что то не так со свойством this.dockedItems. This получен из me, что не так с me? "это выше, я просто не указал," где выше ? Может me вообще перед define указан. Чего ещё нет в примере?
Короче инфы мало, нужен код, ты помоему всё самое интересное опустил
ЗЫ. Навсякий случай я попробывал воспроизвести ошибку.
this_={
dockedItems:{ push:"1"}, //вместо функции у нас будет какая-то непонятная фигня :)
t:[] // обьявим массив
};
this_.t.push="1";
//this_.dockedItems2.push (10);// this_.dockedItems2 is undefined (firefox) это не то
//this_.dockedItems.push (10);//this_.dockedItems.push is not a function (firefox)
// this_.t.push(1); // this_.t.push is not a function (firefox)
this_.dockedItems.push2 (10);// this_.dockedItems.push2 is not a function (firefox)
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 03.07.2012 в 08:29.
|
|
03.07.2012, 11:43
|
Новичок на форуме
|
|
Регистрация: 27.06.2012
Сообщений: 8
|
|
Ext.define("App.module.Calendar", {
extend : "Ext.grid.Panel",
requires : ["App.models.System", 'App.models.WorkType'],
store : null,
title : 'Календарь',
iconCls : "calendar16",
id: 'tsl',
dockedItems: [],
initComponent : function () {
var me = this;
this.dockedItems = [
{
xtype:'toolbar',
id: 'ttl',
dock:'top',
renderTo: document.body,
items:[
[Ext.create('Ext.form.ComboBox', {
store : Ext.create('Ext.data.Store', {
model : 'App.models.System'
}),
displayField : 'name',
valueField : 'id',
typeAhead : true,
editable:false,
triggerAction : 'all',
pageSize: 24,
emptyText : 'Выбор системы...',
width : 300 ,
listeners : {
select : function () {
me.store.proxy.extraParams['system_id'] = records[0].get('id')
me.store.load(
function() {
this.each(function() {
тут я получаю масив...
});
me.head1() // вот тут вызов head1 после того как получен масив
}
);
}
}
})]
,{
xtype : 'button',
text : 'Показать все наименования',
handler : function () {
me.store.load()
}
}
]
}
]
},
head1 : function () {
// эта функция должна вставить grid в под combobox и между другим гидом, после того как произойдет событие select в combobox.
this.dockedItems.push(Ext.create('Ext.grid.Panel', {
columns: [
{ header: '<b>Кол-во работ :</b>', dataIndex: 'name' },
{ header: '<b>2</b>', dataIndex: 'email', width : 27, align: 'center' },
{ header: '<b>5</b>', dataIndex: 'phone', width : 27, align: 'center' },
{ header: '<b>0</b>', dataIndex: 'phone', width : 27, align: 'center' }
]
}
Изображения:
|
1.jpg (7.5 Кб, 7 просмотров) |
|
|
03.07.2012, 13:00
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
me.head1() - срабатывает тогда когда срабатывает select. Тоесть на этот момент, обьект на который указывает this уже давно создан. После того как обьект создан метаться поздняк , то есть запихнуть в dockedItems как в массив уже нечего не получится. Судя по всему массив dockedItems заменяется обьектом после отработки функции initComponent. Это обьясняет почему в dockedItems нет функции push, хотя само свойство существует.
Должно быть другое решение, просто в контейнер можно было через add добавить,
//просто пример, это может быть не обязательно тулбар
tb = new Ext.toolbar.Toolbar({
renderTo: document.body
});
tb.add([{text:'Button 1'}, {text:'Button 2'}]);
а вот в докед итемс неприходилось, попробую посмотреть как до дома добирусь.
Но думаю можно попробывать panel.addDocked({ ... });
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 03.07.2012 в 13:18.
|
|
|
|