在此首先感谢CSDN的文顺
网友,是他提醒了我需要写这文的。
在Loader对象中,动态加载是使用getPath方法获取下载路径的,其代码如下:
1 |
getPath
:
function
(
className
)
{
|
2 |
var
path
=
'
'
,
|
3 |
paths
=
this
.
config
.
paths
,
|
4 |
prefix
=
this
.
getPrefix
(
className
)
;
|
5 |
|
6 |
if
(
prefix
.
length
>
0
)
{
|
7 |
if
(
prefix
=
=
=
className
)
{
|
8 |
return
paths
[
prefix
]
;
|
9 |
}
|
10 |
|
11 |
path
=
paths
[
prefix
]
;
|
12 |
className
=
className
.
substring
(
prefix
.
length
+
1
)
;
|
13 |
}
|
14 |
|
15 |
if
(
path
.
length
>
0
)
{
|
16 |
path
+
=
'
/
'
;
|
17 |
}
|
18 |
|
19 |
return
path
.
replace
(
/
\
/
\
.
\
//
g,
'/')
+
className.replace(/\./g,
"/")
+
'.js';
|
20 |
}
,
|
21 |
|
从变量paths的定义可知,预设路径保存在Loader对象的config对象的paths对象里的,其默认配置如下:
1 |
paths
:
{
|
2 |
'
Ext
'
:
'
.
'
|
3 |
}
|
4 |
|
也就是说,默认Ext的加载路径是根目录。
代码先使用getPrefix方法获取类名的前缀,其代码如下:
1 |
getPrefix
:
function
(
className
)
{
|
2 |
var
paths
=
this
.
config
.
paths
,
|
3 |
prefix
,
deepestPrefix
=
'
'
;
|
4 |
|
5 |
if
(
paths
.
hasOwnProperty
(
className
)
)
{
|
6 |
return
className
;
|
7 |
}
|
8 |
|
9 |
for
(
prefix
in
paths
)
{
|
10 |
if
(
paths
.
hasOwnProperty
(
prefix
)
&
&
prefix
+
'
.
'
=
=
=
className
.
substring
(
0
,
prefix
.
length
+
1
)
)
{
|
11 |
if
(
prefix
.
length
>
deepestPrefix
.
length
)
{
|
12 |
deepestPrefix
=
prefix
;
|
13 |
}
|
14 |
}
|
15 |
}
|
16 |
|
17 |
return
deepestPrefix
;
|
18 |
}
,
|
19 |
|
代码会检查paths对象中是否包含有以类名为属性名称的属性,如果有,说明该类有直接路径,直接返回就可以了。例如,定义了一个类名为“My.App.User”的类,在paths对象存在以下定义:
1 |
'
My
.
App
.
User
'
:
'
.
.
/
app
/
user
.
js
'
|
说明“My.App.User”类不用计算其下载路径,直接根据paths对象中的定义去下载文件就可以了。
如果不存在直接路径,就先找带有路径的前缀,例如“My.App.User”类,如果在paths对象中只
存在“My”的路径定义,则返回前缀“My”。如果paths对象既存在“My”和“My.App”的路径定义,则返回前缀“My.App”。
如果以上都不存在,则返回空字符串。
回到getPath方法,如果返回的前缀不是空字符串,则检查前缀是否与类型相同,如果相同,从paths对象中取出路径直接返回。否则取出前缀的路径,并把类名的前缀部分去掉。
接着判断路径(path)是否存在,如果不存在,给路径加一个“/”。
最后把类名转换为带“.js”的文件名加上路径返回。要注意的是,如果类名中还带有“.”,那么会将“.”转换为“/”,也就是当成路径的一部分。
要预设加载路径,可使用Loader对象的setPath方法。代码很简单,就是将配置对象的成员复制到paths路径里,在此就不讲述了。
下面在浏览器中打开ExtJS 4的API文档,然后在Firebug控制台输入以下命令:
1 |
Ext
.
Loader
.
setPath
(
{
|
2 |
"
My
"
:
"
./app
"
,
|
3 |
"
My.app
"
:
"
./app
"
,
|
4 |
"
Ext
"
:
'
.
/
lib
/
src
'
|
5 |
}
)
|
6 |
console
.
dir
(
Ext
.
Loader
.
config
.
paths
)
;
|
7 |
|
命令使用setPath方法预设了“My”、“My.app”和“Ext”的加载路径。
运行后,在控制台可看到以下输出:
1 |
Ext
"
./lib/src/
"
|
2 |
My
"
./app
"
|
3 |
My
.
app
"
./app/
"
|
4 |
|
该设置是根据一般的项目结构设置的路径。一般情况下都会加载ext-all.js,因而不用设置Ext目录也行,但是如果你喜欢全部动态加载,也可以按示例代码进行设置,把ExtJS的源代码放到lib的src目录里。一般项目中,自定义的类可以放到app目录下,类名的命名空间可以随便设置,只要在paths对象中指定其路径就可以了。例如定义了“My.base”、“My.app.user”和“My.app.product”等类,以及使用“Ext.ux.plugin”等Ext插件或扩展,使用getPath获得的路径将是:
1 |
.
/
app
/
base
.
js
|
2 |
.
/
app
/
user
.
js
|
3 |
.
/
app
/
product
.
js
|
4 |
.
/
lib
/
scr
/
ux
/
plugin
.
js
|
5 |
|
现在的问题是插件也要放到src目录下,因而为了方便,你可以将插件另外定义插件的目录,例如:
1 |
Ext
.
Loader
.
setPath
(
"
Ext.ux
"
,
"
./lib/ux
"
)
;
|
这样就可以把插件放到lib下的ux目录了。
经过以上的设置,在OnReady方法前使用Ext.require方法就可顺利的加载库文件了,例如:
1 |
Ext
.
Loader
.
setConfig
(
{
enabled
:
true
}
)
;
|
2 |
Ext
.
Loader
.
setPath
(
{
|
3 |
"
My
"
:
"
./app
"
,
|
4 |
"
My.app
"
:
"
./app
"
,
|
5 |
"
Ext
"
:
'
.
/
lib
/
src
'
,
|
6 |
"
Ext.ux
"
:
"
./lib/ux
"
|
7 |
}
)
;
|
8 |
Ext
.
require
(
[
|
9 |
'
My
.
base
'
,
|
10 |
'
My
.
app
.
user
'
,
|
11 |
'
My
.
app
.
product
'
,
|
12 |
'
Ext
.
ux
.
plugin
'
|
13 |
]
)
;
|
14 |
Ext
.
onReady
(
function
(
)
{
|
15 |
//
应用代码;
|
16 |
}
)
;
|
17 |
|
代码中,setConfig
方法设置eabled属性的作用是开启动态加载中的依赖加载功能。
分享到:
相关推荐
ExtJS 4中动态加载的路径设置 Extjs4 API文档阅读(一)——类系统(Class System) Extjs4 API文档阅读(三)——布局和容器 Extjs4 API文档阅读(二)——MVC构架(上) Extjs4 API文档阅读(二)——MVC构架(下) Extjs4...
EXTJS4中的核心概念包括`Ext.onReady`和`Ext.application`方法。`Ext.onReady`在DOM加载完成后自动调用,确保所有元素都可被脚本引用。例如,可以在这个方法内添加`alert('hello world!')`,在页面加载完毕后弹出...
ExtJS4中可以为元素添加事件响应: - **添加单击事件响应**:通过Ext.onReady或Ext.application方法,在页面加载完毕后为DOM元素添加事件监听器,执行指定的函数。 #### 6. CSS和JavaScript引入注意事项 在ExtJS...
这篇文章将探讨如何在这些组件中动态加载本地页面数据,以提升用户体验并实现灵活的数据展示。 首先,`Ext.Panel`是一个可配置的容器,它可以包含其他组件,如按钮、表格、表单等。它提供了丰富的布局管理,如`fit`...
在“Extjs4.2 动态加载项目(权限模块)”中,动态加载主要体现在两个方面:一是对代码的懒加载,二是针对权限控制的动态加载。 1. **代码懒加载**:在大型应用中,所有类一次性加载可能会导致页面加载速度变慢。通过...
在Extjs中推荐使用`Ext.onReady`事件来确保页面的DOM完全加载后再执行脚本,这样可以保证脚本执行的正确性。 #### 6. 元素操作与模板 - **DomHelper类**: 提供了一种简洁的方法来创建和操作DOM元素。 - **...
记住,这只是一个基础环境的搭建,实际开发中可能还需要配置服务器、设置数据源、优化加载速度等。随着对ExtJS的理解加深,你还可以探索更高级的功能,如自定义组件、Ajax通信、图表和富媒体支持等。
- 在MyEclipse中新建一个Web Project项目,命名为`Extjs4`。 - 将下载的Extjs4.0.7压缩包解压,并将所有文件复制到项目的Webroot目录下。 - Examples目录包含官方示例代码,可用于参考学习。 - 部署并启动Tomcat...
在ExtJS 4中,TreeCombo主要由两部分组成:一个普通的ComboBox和一个内嵌的TreeView。当用户展开ComboBox时,内部的TreeView显示,用户可以浏览和选择树形结构中的节点。一旦用户选择了某个节点,ComboBox的输入框将...
extJS4 MVC demo项目入门涉及的是前端开发领域的技术要点,主要介绍了extJS4框架中的MVC(Model-View-Controller)模式在实际开发项目中的应用方法,并着重讲述了如何实现前端资源的按需加载和动态加载。在了解这些...
ExtJS 中的 xtype.typename 介绍 ExtJS 中的 xtype 是一个非常重要的概念,它用于定义组件的类型,从而确定组件的行为和样式。xtype 是 ExtJS 的核心组件之一,它提供了大量的组件类型,满足不同场景下的需求。 ...
在这个主题中,我们将深入探讨如何在ExtJS 4.0中结合MVC模式实现动态加载功能。 **MVC模式** MVC模式是一种软件设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。在...
在EXTJS 4.0.7版本中,由于路径错误可能会导致JSBuilder无法正确解析和处理JSB3文件,因此提供的"已修正路径错误"的jsb3文件解决了这个问题。将这个修复后的sdk4.0.7.jsb3文件放置在EXTJS框架的根目录下,确保...
在EXTJS3中,我们可以创建一个新的Panel或Window组件,并在其配置中添加自定义的HTML代码,这部分代码会加载百度地图的JavaScript API。例如: ```javascript var mapPanel = new Ext.Panel({ title: '百度地图', ...
首先,我们来看ExtJS4中的Grid组件。Grid是ExtJS中用于展示和管理数据的一种视图,它提供了一种灵活且可定制的方式来展示大量数据,并且支持分页、排序、过滤等功能。在实现增删改查时,Grid通常会结合Store和...
在ExtJS 4中,Loader的主要职责是动态加载类和资源,这样可以实现模块化开发,减少初次页面加载时的数据量,提高应用程序的性能。Loader的工作原理是基于依赖管理,它可以分析类之间的依赖关系,并在需要时按需加载...
- **创建编辑器组件**:在ExtJS 4中,你可以创建一个自定义组件来封装百度编辑器。这通常涉及使用`Ext.extend()`来继承ExtJS的基础组件,并在`initComponent()`方法中设置编辑器的配置。 - **加载编辑器脚本**:在...
4. **常用方法**:在ExtJS中,`Ext.onReady`和`Ext.application`是非常关键的两个方法。`Ext.onReady`会在DOM加载完成后执行,确保所有元素都可被脚本访问。你可以尝试在其中添加代码,如`alert('hello world!')`,...
TreePanel通常配置`proxy`来设置数据源的加载方式,例如设置为`ajax`类型,并指定URL(对应Struts2 Action的路径)和请求参数。当用户展开树节点时,TreePanel会自动发送Ajax请求获取子节点数据。 6. **数据加载...
在ExtJS4中,视图通常由组件(如表格、窗口、面板等)构成,通过绑定到模型,动态显示和更新数据。`Ext.container`系列类提供了各种容器,`Ext.Component`是所有组件的基类。 3. **控制器(Controller)**:控制器...