ext-时间上控制操作defer

本文介绍如何在ExtJS中实现界面的定时操作,如界面禁用与恢复,通过使用defer方法来延迟执行特定任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回想,刚开始学ext的时候, 不知道怎么控制时间了,一下蒙了,其实就对ext不够了解,

在这里记录一下, 如果你想让一些操作 在多少时间之后执行的话 ,你可以使用defer

先构造一個function

代码:



(function(){}).defer(3000);






var el=Ext.getBody();


el.mask('现在你不能动...','x-mask-loading');//禁用界面


(function(){el.unmask()}).defer(3000); //3秒后 ,解开



这句代码如果写成 el.unmask.defer(3000); 在firefox会出现 错误, 我想应该是源代码的一个bug ,如果这里有人知道的



可以留言告诉我谢谢
<think>好的,我现在需要解决用户提到的关于在Emacs中使用use-package时,由于always-defer导致require无法加载本地文件的问题。用户希望找到解决方案,确保本地文件能够正确加载。首先,我需要回忆use-package的基本机制。use-package是一个用于声明式配置Emacs包的宏,它提供了很多关键字来控制包的加载时机。用户提到的问题涉及到:defer和:ensure这两个关键字,以及always-defer的设置。可能的情况是,当设置always-defer为t时,所有use-package声明默认会延迟加载,这可能导致通过require直接加载本地文件时出现问题。接下来,我需要考虑require和load的关系。require会在第一次调用时加载文件,如果已经加载则不做任何事情。而load则每次都会强制加载文件。如果use-package默认延迟加载,可能导致require在需要的时候并没有被正确执行,从而本地文件未被加载。然后,用户提到的本地文件未加载,可能是因为require在use-package的配置块中被延迟了。这时候需要找到一种方法来强制立即加载这些本地文件,而不是延迟。可能的解决方案包括:1.使用:config块来执行require,因为:config中的代码在包加载后执行,但如果包被延迟,可能仍然有问题。不过,如果配合:demand关键字,可以强制立即加载。2.使用:load-path指定本地文件的路径,确保Emacs能够找到这些文件。同时,可能需要使用(load "file")而不是require,因为load不会检查是否已经加载,而是直接加载。 3.在use-package声明中显式设置:defer nil,覆盖always-defer的全局设置,使得该包立即加载,从而其中的require也能及时执行。4.将require语句放在use-package之外,例如在init.el的顶层或使用eval-after-load来确保在需要的时候加载。另外,参考用户提供的引用内容,尤其是引用[5]中提到使用add-to-list将路径添加到load-path中,这可能是一个关键点。如果本地文件不在load-path中,即使使用require也无法找到,因此需要确保路径正确。 综合这些信息,我需要验证这些方法是否有效。例如,在use-package中使用:demand t来禁用延迟,或者在:config中使用(load-file"path/to/file.el")来强制加载。同时,检查load-path是否正确包含本地文件的目录。可能还需要注意use-package的:ensure参数,如果设置为t,它会尝试安装包,但本地文件不需要安装,所以应该设置:ensurenil。此外,如果用户已经设置了use-package-always-defer为t,那么每个use-package声明默认是延迟的,需要显式覆盖。最后,总结出几种具体的解决方案,并给出示例代码,帮助用户解决问题。同时,生成相关问题,帮助用户进一步理解相关配置。</think>### 解决方案 当`use-package-always-defer`设置为`t`时,所有包默认延迟加载。若需在`use-package`中加载本地文件,需通过以下方法显式控制加载时机: #### 方法1:使用`:demand`强制立即加载 在`use-package`声明中添加`:demand t`,覆盖全局延迟设置: ```lisp (use-package my-local-package :demand t ; 强制立即加载 :load-path "~/path/to/local-file" ; 指定本地文件路径 :config (require 'my-local-module)) ; 确保模块加载 ``` 此方法通过`:demand`绕过延迟逻辑[^5]。 #### 方法2:在`:config`中手动加载文件 直接通过`load`或`require`在配置阶段执行: ```lisp (use-package emacs :load-path "~/path/to/local-file" :config (load "my-local-file.el") ; 强制加载文件 (require 'my-local-module)) ``` 注意`:load-path`需正确指向文件目录[^5]。 #### 方法3:全局禁用`always-defer` 若需完全禁用延迟,可在配置中设置: ```lisp (setq use-package-always-defer nil) ; 关闭全局延迟 (use-package my-local-package :load-path "~/path/to/local-file" :config (require 'my-local-module)) ``` #### 方法4:使用`eval-after-load`延迟依赖 若文件需在特定包加载后才执行: ```lisp (use-package some-parent-package :config (eval-after-load 'some-parent-package (require 'my-local-module))) ``` ### 关键点总结 1. **路径设置**:通过`:load-path`或`add-to-list 'load-path`确保Emacs能找到本地文件[^5]。 2. **加载时机控制**:使用`:demand`、`:config`或`eval-after-load`明确加载顺序。 3. **避免`:ensure`干扰**:若本地文件非通过包管理器安装,需设置`:ensure nil`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值