ПРИМЕЧАНИЕ. Автор является новичком в EXT JS и пытается использовать MVC в своих проектах
представьте, что у меня есть веб-сервис, модель данных которого не зафиксирована.Я хотел бы, чтобы мои модели создавались динамически, из которых я динамически создаю хранилища и, следовательно, динамические компоненты, данные которых находятся в этих хранилищах.
Давайте начнем с просмотра определения класса модели для модели:
Ext.define('MNESIA.model.User', {
extend: 'Ext.data.Model'
});
В этом определении модели я пропустил параметр 'fields'
в объекте конфигурации.Это потому, что, где бы я ни создавал экземпляр модели описанного выше типа, я хочу динамически дать ему определение его полей, другими словами, у меня может быть много экземпляров этой модели, но все они имеют различное определение их параметра 'fields'
.
Отсюда я создаю определение магазина, например:
Ext.define('MNESIA.store.Users', {
extend: 'Ext.data.Store',
autoLoad: true
}
});
Там у меня есть определение магазина.Я пропустил параметр 'model'
, потому что я буду динамически прикреплять его к каждому экземпляру этого класса.На самом деле, даже настройки 'data'
и 'proxy'
не упоминаются, так как я хотел бы назначить их во время создания экземпляра этого магазина.
Оттуда я хотел бы иметь динамические представления, управляемые динамическими хранилищами.,Здесь ниже у меня есть определение сетки
Ext.define('MNESIA.view.Grid' , {
extend: 'Ext.grid.Panel',
alias : 'widget.mygrid',
width: 700,
height: 500
});
. Я упустил следующие параметры в спецификации сетки: 'columns'
, 'store'
и 'title'
.Это потому, что я намереваюсь создать множество гридов в качестве экземпляров спецификации выше, но иметь динамические хранилища, заголовки и определения столбцов.
В некоторых местах в моем контроллере у меня есть некоторый код, который выглядит следующим образом:
function() {
var SomeBigConfig = connect2Server();
/*
where:
SomeBigConfig = [
{"model":[
{"fields":
["SurName","FirstName","OtherName"]
}
]
},
{"store":[
{"data":
{"items":[
{"SurName":"Muzaaya","FirstName":"Joshua","OtherName":"Nsubuga"},
{"SurName":"Zziwa","FirstName":"Shamusudeen","OtherName":"Haji"},
...
]
}
},
{"proxy": {
"type": "memory",
"reader": {
"type": "json",
"root": "items"
}
}
}
]
},
{"grid",[
{"title":"Some Dynamic Title From Web Service"},
{"columns": [{
"header": "SurName",
"dataIndex": "SurName",
"flex": 1
},{
"header": "FirstName",
"dataIndex": "FirstName",
"flex": 1
},
{
"header": "OtherName",
"dataIndex": "OtherName",
"flex": 1
}
]}
]
}
]
*/
var TheModel = Ext.create('MNESIA.model.User',{
fields: SomeBigConfig[0].model[0].fields
});
var TheStore = Ext.create('MNESIA.store.Users',{
storeId: 'users',
model: TheModel,
data: SomeBigConfig[1].store[0].data,
proxy: SomeBigConfig[1].store[1].proxy
});
var grid = Ext.create('MNESIA.view.Grid',{
store: TheStore,
title: SomeBigConfig[2].grid[0].title,
columns: SomeBigConfig[2].grid[1].columns
});
// From here i draw the grid anywhere on the, page say by
grid.renderTo = Ext.getBody();
// end function
}
Теперь этот вид динамического создания моделей, затем их сохранения и затем сеток приводит к неэффективному использованию памяти, и поэтому для этого потребуется вызывать методы уничтожения каждого компонента каждый раз, когда мы хотим уничтожить этот компонент.
Вопросы:
Qn 1: Позволяет ли реализация MVC EXT JS 4 в MVC?
Qn 2: Как бы я получил ту же функциональность, используя xtypes
моих новых классов.Скажем, например:
{
xtype: 'mygrid',
store: TheStore,
title: SomeBigConfig[2].grid[0].title,
columns: SomeBigConfig[2].grid[1].columns
}
Qn 3: Если то, что я написал выше, действительно работает и прагматично правильно, могу ли я применить это ко всем компонентам, таким как Панели, TabPanels, Trees (посредством чего их конфигурации отправляются удаленным сервером)?
Qn 4: Если у меня есть контроллеры A и B, с контроллером A, имеющим спецификацию представлений: [C, D] и контроллер B, имеющий представления: [E, F], будет ли правильно, если действия, сгенерированные представлением: E, обрабатываются контроллером A?т.е. может ли контроллер обрабатывать действия представления, которое не зарегистрировано в его конфигурации представлений?
ПРИМЕЧАНИЕ: я новичок в Ext JS, но хотел бы узнать больше.Посоветуйте мне, как улучшить мою кривую обучения EXT JS.Спасибо