【问题标题】:extjs desktop, can't save window positionextjs桌面,无法保存窗口位置
【发布时间】:2014-03-05 17:32:20
【问题描述】:

我需要将窗口的位置和大小保存到数据库表中, 因此:

在“创建”事件上 --> 保存位置和大小

事件“移动”-->保存位置

在事件“调整大小”--> 保存大小

在事件“最大化”-> 保存“最大化”,
但不是位置 (0,0) 和大小 (desktopSize)

  • 这种情况下需要:
    1. 用户注销并登录
    2. 按下“恢复”按钮
    3. 窗口在最大化之前应该缩小到大小(和位置)

只有在旧的位置和大小保留在数据库中时才能实现。

某些事件启动某些函数以通过 AJAX 将值存储到 db,顾名思义:

调整大小saveSize()
移动savePosition()
最大化saveMaximize()
恢复restoreWindow()

但我不知道如何处理这些事件,因为这些事件没有被触发,因为我“希望”它们被触发。因此,在我有机会获得它们之前,我需要存储的值被覆盖。我记录了这些事件:

(案例 --> 事件)

打开窗口:
1. 移动
2. 调整大小
3. 移动
没关系

“点击”最大化:
1. 调整大小
2. 移动
3. 最大化
位置和大小值被覆盖,但只需要保存标志“最大化”:true

“点击”恢复:
1. 移动
2. 恢复
3. 调整大小
位置被保存到数据库中,然后我才能从数据库中获取“旧”值来恢复

移动窗口:
- 移动
一切都很好

如何处理??

【问题讨论】:

    标签: javascript extjs event-handling resize


    【解决方案1】:

    不要手动执行此操作,而是使用组件状态处理:http://docs.sencha.com/extjs/4.2.2/#!/example/state/state.html

    【讨论】:

    • 这仅在会话中有效!我能够保存适当的值,但在我可以执行此操作之前状态会发生变化。所以我需要以某种方式处理这些事件......
    【解决方案2】:

    陷入了我自己的想法。只是忘了问
    “extjs 是如何管理这个的:最大化和恢复”。

    状态存储在窗口对象本身中:

    scope = win.events.maximize.listeners[0].scope;
    (object) size = scope.restoreSize
    [] position = scope.restorePos
    

    因此,事件“最大化”是最后触发的,所以我可以将之前的状态写入数据库,我觉得有点脏,因为我不知道为什么 extjs 经常触发事件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多