Не работает 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, время: 02:11. |