Не работает 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 вставляет, но просто полоску(грид не работает, даже если явно указать ширину и высоту, будет просто квадрат)!! Как можно вставить грид? выручайте ребята! |
Какого хрена me.head1() у тебя делает в items если он нечего не возвращает.
И где обьявлен me ??? items:[ Какой то код и выдов me.head1()] - эту строчку надо бы поподробнее расписать |
var me = this это выше, я просто не указал, судь не в этом, главное что функция вызываеться, в items есть combobox, там linester:select вызывает head1 ты намекаешь на то что надо добавить return в head1? |
Судя по этому пример items:[ Какой то код и выдов me.head1()]
me.head1() - находитя внутри обьявления массива. Обычно когда вставляют вызов функции в массив пдразумевают что она вернёт в него значение.
z=[ f(1), f(2) ];
function f(x){ return x*10; }
alert(z);//10,20
Странно в объявление массива, вставлять вызов функции просто так :D Внутри функции 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)
|
Вложений: 1
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' }
]
}
|
me.head1() - срабатывает тогда когда срабатывает select. Тоесть на этот момент, обьект на который указывает this уже давно создан. После того как обьект создан метаться поздняк :D, то есть запихнуть в dockedItems как в массив уже нечего не получится. Судя по всему массив dockedItems заменяется обьектом после отработки функции initComponent. Это обьясняет почему в dockedItems нет функции push, хотя само свойство существует.
Должно быть другое решение, просто в контейнер можно было через add добавить,
//просто пример, это может быть не обязательно тулбар
tb = new Ext.toolbar.Toolbar({
renderTo: document.body
});
tb.add([{text:'Button 1'}, {text:'Button 2'}]);
а вот в докед итемс неприходилось, попробую посмотреть как до дома добирусь. Но думаю можно попробывать panel.addDocked({ ... }); |
| Часовой пояс GMT +3, время: 20:20. |