转自http://www.wenhaozhong.com/27.html
这里基于 Extjs4.2(发文时官方刚发布了最新版5.0) 进行开发的,更换主题后,主题信息保存在本地 cookie 中,如果要保存在数据库中,请自行修改!
由于我采用的是Sencha Architect3 可视化开发工具 ,前台代码采用官方推荐的mvc模式,
首先,我新建了个Combobox 让用户选择主题
model代码如下:
- Ext.define('Kl.model.sys.Theme', {
- extend: 'Ext.data.Model',
- requires: [
- 'Ext.data.Field'
- ],
- fields: [
- {
- name: 'name'
- },
- {
- name: 'id'
- }
- ]
- });
view 代码如下:
- {
- xtype: 'combobox',
- itemId: 'mycombobox1',
- padding: 0,
- fieldLabel: '皮肤更换 ',
- labelAlign: 'right',
- labelPad: 1,
- labelWidth: 65,
- name: 'theme',
- value: 'ext-all.css',
- displayField: 'name',
- forceSelection: true,
- queryMode: 'local',
- store: 'sys.Theme',
- typeAhead: true,
- valueField: 'id',
- listeners: {
- change: { //改变选择时触发事件
- fn: me.onMycomboboxChange11,
- scope: me
- },
- afterrender: {//初始化数据
- fn: me.onMycomboboxAfterRender11,
- scope: me
- }
- }
- }
在combobox中的store 保存了主题css文件的路径
Store 代码如下:
- Ext.define('Kl.store.sys.Theme', {
- extend: 'Ext.data.Store',
- requires: [
- 'Kl.model.sys.Theme',
- 'Ext.data.proxy.Ajax',
- 'Ext.data.reader.Array'
- ],
- constructor: function(cfg) {
- var me = this;
- cfg = cfg || {};
- me.callParent([Ext.apply({
- model: 'Kl.model.sys.Theme',
- storeId: 'sys.Theme',
- data: [
- {
- name: '经典怀旧',
- id: 'ext-all.css'
- },
- {
- name: '钢铁世界',
- id: 'ext-all-gray.css'
- },
- {
- name: '粉红女郎',
- id: 'ext-all-red.css'
- }
- ],
- proxy: {
- type: 'ajax',
- reader: {
- type: 'array'
- }
- }
- }, cfg)]);
- }
- });
由于采用基本的事件处理就可以搞定,所以就没有写 控制器 control
事件处理代码如下: 采用 Ext.util.CSS.swapStyleSheet() 方法设置主题。
- onMycomboboxChange11: function(field, newValue, oldValue, eOpts) {
- if(newValue!=oldValue){
- Ext.util.CSS.swapStyleSheet('theme', '../../extjs4.2/resources/css/'+newValue);
- var cp = new Ext.state.CookieProvider();
- Ext.state.Manager.setProvider(cp);
- cp.set("themes",newValue);
- }
- },
- onMycomboboxAfterRender11: function(component, eOpts) {
- var cp = new Ext.state.CookieProvider();
- Ext.state.Manager.setProvider(cp);
- //cp.set("themes",data.username);
- var themes = cp.get("themes");
- if(themes){
- component.setValue(themes);
- Ext.util.CSS.swapStyleSheet('theme', '../../extjs4.2/resources/css/'+themes);
- }
- }
小伙伴们,你搞定了吗? 附上效果图:
其他参考链接