首页 > 其他分享 >ExtJS 4中动态加载的路径设置

ExtJS 4中动态加载的路径设置

时间:2023-05-21 15:02:28浏览次数:36  
标签:paths app 路径 prefix Ext My ExtJS 加载


      在此首先感谢的文顺 网友,是他提醒了我需要写这文的。

      在Loader对象中,动态加载是使用getPath方法获取下载路径的,其代码如下:



getPath :   function ( className )   {


        var   path   =   ' ' ,


                paths   =   this . config . paths ,


                prefix   =   this . getPrefix ( className ) ;


 


        if   ( prefix . length   >   0 )   {


                if   ( prefix   = = =   className )   {


                        return   paths [ prefix ] ;


                }

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对象里的,其默认配置如下:

 




paths :   {


        ' Ext ' :   ' . '


}


 


      也就是说,默认Ext的加载路径是根目录。

      代码先使用getPrefix方法获取类名的前缀,其代码如下:



getPrefix :   function ( className )   {


        var   paths   =   this . config . paths ,


                prefix ,   deepestPrefix   =   ' ' ;


 


        if   ( paths . hasOwnProperty ( className ) )   {


                return   className ;


        }


 


        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对象存在以下定义:



' 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控制台输入以下命令:



Ext . Loader . setPath ( {


        " My " : " ./app " ,


        " My.app " : " ./app " ,


        " Ext " : ' . / lib / src '


} )


console . dir ( Ext . Loader . config . paths ) ;


 


      命令使用setPath方法预设了“My”、“My.app”和“Ext”的加载路径。

       运行后,在控制台可看到以下输出:

Ext         " ./lib/src/ "


My           " ./app "


My . app     " ./app/ "


 


      该设置是根据一般的项目结构设置的路径。一般情况下都会加载ext-all.js,因而不用设置Ext目录也行,但是如果你喜欢全部动态加载,也可以按示例代码进行设置,把ExtJS的源代码放到lib的src目录里。一般项目中,自定义的类可以放到app目录下,类名的命名空间可以随便设置,只要在paths对象中指定其路径就可以了。例如定义了“My.base”、“My.app.user”和“My.app.product”等类,以及使用“Ext.ux.plugin”等Ext插件或扩展,使用getPath获得的路径将是:



. / app / base . js


. / app / user . js


. / app / product . js


. / lib / scr / ux / plugin . js


 


 

      现在的问题是插件也要放到src目录下,因而为了方便,你可以将插件另外定义插件的目录,例如:



Ext . Loader . setPath ( " Ext.ux " , " ./lib/ux " ) ;


      这样就可以把插件放到lib下的ux目录了。

      经过以上的设置,在OnReady方法前使用Ext.require方法就可顺利的加载库文件了,例如:



Ext . Loader . setConfig ( { enabled :   true } ) ;


Ext . Loader . setPath ( {


        " My " : " ./app " ,


        " My.app " : " ./app " ,


        " Ext " : ' . / lib / src ' ,


    " Ext.ux " : " ./lib/ux "


} ) ;


Ext . require ( [


        ' My . base ' ,

10 

        ' My . app . user ' ,

11 

        ' My . app . product ' ,

12 

        ' Ext . ux . plugin '

13 

] ) ;

14 

Ext . onReady ( function ( ) {

15 

        // 应用代码;

16 

} ) ;

17 

 


setConfig


标签:paths,app,路径,prefix,Ext,My,ExtJS,加载
From: https://blog.51cto.com/dqhuang/6319481

相关文章

  • 【译】ExtJS 4.1会带来什么
    原文:http://www.sencha.com/blog/whats-new-in-ext-js-4-1/渲染和布局。虽然我们的大多数时间一直致力于这项努力,但也有很多其他方法的进展可以分享。这些改进当中,主要的改进包括Grid、BorderLayout和海王星主题预览这些内容。     性能要成功地和永久地提高性能,测量已成为......
  • ExtJS应用架构设计(三)
    原文:http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-3/?mkt_tok=3RkMMJWWfF9wsRonuKrLZKXonjHpfsX56uolXaS2lMI%2F0ER3fOvrPUfGjI4AT8t0dvycMRAVFZl5nR9dFOOdfQ%3D%3D      在该系列文章的前两篇文章中(一、二),我们探讨了如何使用ExtJS4的新特性构建一......
  • ExtJS应用架构设计(二)
    原文:http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-2/      在《ExtJS应用架构设计》一文,我们探讨了如何使用ExtJS构建一个潘多拉风格的应用程序。我们采用了MVC架构,并将它应用到一个比较复杂的用户界面,应用中带有多个视图和模型。在这篇文章中,我......
  • ExtJS 4中自定义Grid列标题的对齐方式
           从ExtJS2.0到目前的4.0,Grid的列标题对齐方式都是和数据的对齐方式一致的,这不太符合中国人的习惯。解决办法是,自己重写一下Ext.grid.column.Column对象中渲染列标题的对齐方式的代码。代码只有一句,在afterRender方法中,因而重写afterRender方法就行了,具体做法如下。......
  • ExtJS 4 Grid组件
    我们正在努力为ExtJS4做准备,到目前为止,我们已经发布了3个开发者预览版,我们的目标是争取在4到6周内或争取更快的时间内发布最终版本。在最近的开发者预览版,我们首次发布了新的Grid组件。新的grid已经重写,而且比3.x版本的有更多功能。新的grid不但大幅提高了性能,而且更加灵活,因此......
  • ExtJS 4 Beta 2预览:Ext.Brew包
       我们还没有介绍过ExtJS4众多特性之一的新Ext.Brew包。这是独一无二的Javascript框架,Ext.Brew是采用Sencha独特技术酿造的的一杯完美的茶。   使用新数据包的强大功能,可在任何时候构建一个生成一致均衡的茶的应用程序。开始之前,首先定义一个部件之间用于交互的模型。Ex......
  • 八叉树建立地图并实现路径规划导航
    构建语义地图时,用的是octomap_server和semantic_slam:octomap_generator,不过还是整理下之前的学习笔记。一、Octomap安装并使用Octomap_Server1.1Apt安装Octomap库如果你不需要修改源码,可以直接安装编译好的octomap库,记得把ROS版本「kinetic」替换成你用的:sudoapt-get......
  • 力扣---1372. 二叉树中的最长交错路径
    给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:选择二叉树中任意 节点和一个方向(左或者右)。如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方向:左变右或者右变左。重复第二步和第三步,直到你在树中无法继续移动。交错路径的长度......
  • 最短路径算法
    最短路径问题这是一类最基本的图论问题,给定一个图,求从某一个源节点到某一个目的节点的最短路径。比较常见的算法有dijkstra,floyd,SPFA。在开始之前我们先说一说“松弛”这个词。在描述最短路径算法的时候,我们经常可以看到松弛(relaxtion)一词,通常来说,所有的最短路径算法都......
  • Spring Boot |如何让你的 bean 在其他 bean 之前完成加载
    本文围绕SpringBoot中如何让你的bean在其他bean之前完成加载展开讨论。问题今天有个小伙伴给我出了一个难题:在SpringBoot中如何让自己的某个指定的Bean在其他Bean前完成被Spring加载?我听到这个问题的第一反应是,为什么会有这样奇怪的需求?Talkischeap,sho......