Ext4.1下desktop桌面快捷方式和开始菜单的动态绑定

以前一直用ext2.0,最近刚好有个项目要做个web桌面,于是就下了个4.1,想体验下新的功能~

4.1相比2.0,变化还是不少,2.0的desktop以前也实现过~所以对ext的desktop的还是有一定的概念~通过一个下午的努力!实现想要的效果~

 

桌面快捷方式实现比较简单,只需将app.js的shortcuts修改

 

1 shortcuts: Ext.create('Ext.data.Store', {
2                 model: 'Ext.ux.desktop.ShortcutModel',
3                 data: [
4                     { name: 'Grid Window', iconCls: 'grid-shortcut', module: 'grid-win' },
5                     { name: 'Accordion Window', iconCls: 'accordion-shortcut', module: 'acc-win' },
6                     { name: 'Notepad', iconCls: 'notepad-shortcut', module: 'notepad' },
7                     { name: 'System Status', iconCls: 'cpu-shortcut', module: 'systemstatus'}
8                 ]
9             })

 

1 shortcuts: Ext.create("Ext.data.Store", {
2                 model: "Ext.ux.desktop.ShortcutModel",
3                 autoLoad:  false,
4                 proxy: {
5                     type: 'ajax',
6                     url: '/MyAppData',
7                     reader: { type: 'json', root: '' }
8                 }
9             })

关于desktop桌面快捷方式默认不换行的方法可以gg,已经有人给出了解决方法~

 

开始菜单的实现还颇费了点周折!首先将app.js的

 

 1 getModules :  function(){
 2          return [
 3              new MyDesktop.VideoWindow(),
 4              // new MyDesktop.Blockalanche(),
 5               new MyDesktop.SystemStatus(),
 6              new MyDesktop.GridWindow(),
 7              new MyDesktop.TabWindow(),
 8              new MyDesktop.AccordionWindow(),
 9              new MyDesktop.Notepad(),
10              new MyDesktop.BogusMenuModule(),
11              new MyDesktop.BogusModule()
12         ];
13     }

改为

1 getModules :  function(){
2          return [mArr];
3     }

 

再将桌面的创建由

 

1 Ext.onReady( function () {
2                 myDesktopApp =  new MyDesktop.App();
3             });

改为

 

 1  var c = 1;
 2          var mArr = [];
 3          var s = Ext.create("Ext.data.Store", {
 4             model: "Ext.ux.desktop.ShortcutModel",
 5             autoLoad:  false,
 6              // idProperty: 'AppID',
 7              proxy: {
 8                 type: 'ajax',
 9                 url: '/MyAppData',
10                 reader: { type: 'json', root: '' }
11             }
12         });
13 
14         s.on('load',  function () {
15             s.each( function (r) {
16                  var it = Ext.define("MyDesktop.M" + c, {
17                     extend: "Ext.ux.desktop.Module",
18                     id: r.get("AppName"),
19                      // windowId: "video-window",
20                      tipWidth: 160,
21                     tipHeight: 96,
22                     init:  function () {
23                          this.launcher = {
24                             text: r.get("AppName"),
25                             href: r.get("AppUrl"),
26                             target:'_blank',
27                             iconCls: "menu" + c
28                         }
29                     },
30                     gotoUrl:  function () {
31                         location.href = r.get("AppUrl")
32                     }
33                 });
34                 c++;
35                 mArr.push( new it());
36             });
37 
38             Ext.onReady( function () {
39                 myDesktopApp =  new MyDesktop.App();
40             });
41         });
42         s.load();

应为我的菜单是直接连接到其他页面,所以将原来的createWindow改为gotoUrl.

同时在Ext.ux.desktop.App 添加gotoUrl方法并帮定到事件上

 

 1 getStartConfig:  function () {
 2          var b =  this,
 3         a = {
 4             app: b,
 5             menu: []
 6         },
 7         c;
 8         Ext.apply(a, b.startConfig);
 9          // 设置开始菜单
10          Ext.each(b.modules,
11          function (d) {
12             c = d.launcher;
13              if (c) {
14                 c.handler = c.handler || Ext.bind(b. gotoUrl, b, [d]);
15                 a.menu.push(d.launcher)
16             }
17         });
18          return a
19     },
20      gotoUrlfunction (a) {  // 直接打开连接
21           var b = a.gotoUrl();
22     },

 

最后上图:

总觉得这样的实现方式不是很好,暂时实现效果!有空了再来优化下,各位有什么好的方法也可以讨论下!

转载于:https://www.cnblogs.com/gsyst/archive/2012/05/22/2512738.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ext 4 中,可以通过使用 `bind` 方法将 Grid 和 Form 绑定在一起,并且在表单中进行更改时自动更新绑定的 Store 中的行。 首先,在 Grid 中创建一个 Store: ```javascript var store = Ext.create('Ext.data.Store', { fields: ['id', 'name', 'email'], data: [ {id: 1, name: 'John', email: 'john@example.com'}, {id: 2, name: 'Jane', email: 'jane@example.com'} ] }); ``` 接下来,创建一个 Grid: ```javascript var grid = Ext.create('Ext.grid.Panel', { store: store, columns: [ {text: 'ID', dataIndex: 'id'}, {text: 'Name', dataIndex: 'name'}, {text: 'Email', dataIndex: 'email'} ], height: 200, width: 400, renderTo: Ext.getBody() }); ``` 然后,创建一个 Form: ```javascript var form = Ext.create('Ext.form.Panel', { bodyPadding: 5, width: 350, height: 250, renderTo: Ext.getBody(), items: [{ xtype: 'textfield', fieldLabel: 'Name', name: 'name' }, { xtype: 'textfield', fieldLabel: 'Email', name: 'email' }] }); ``` 最后,在 Grid 和 Form 中使用 `bind` 方法将它们绑定在一起: ```javascript grid.getSelectionModel().on('selectionchange', function(selModel, selections) { form.getForm().bindRecord(selections[0]); }); ``` 现在,当用户在 Grid 中选择一行时,表单将自动更新为该行的值,并且在表单中进行更改时,该行将自动更新到绑定的 Store 中。 ```javascript form.getForm().on('update', function(form, record) { record.commit(); }); ``` 注意,当在表单中进行更改时,必须在表单的 `update` 事件中手动调用 `commit()` 方法才能将更改保存到 Store 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值