当前位置: 代码迷 >> Web前端 >> dojo1.7通译 通过dojoConfig来配置dojo
  详细解决方案

dojo1.7通译 通过dojoConfig来配置dojo

热度:612   发布时间:2012-09-20 09:36:50.0
dojo1.7翻译 通过dojoConfig来配置dojo

原文地址:http://dojotoolkit.org/reference-guide/1.7/dojo/_base/config.html#dojo-config

?

dojo.config 

位置 dojo/_base/config 文件夹中

从版本v0.4开始使用

以前不叫dojoConfig而是叫djConfig

?

通过设置,可以影响到以下一些功能

1.使用dojo.parser解析dijit控件的触发

2.调试日志的使用

3.设置国际化

4.将一些dojo的组件放置于非指定的位置

?

dojo.config的使用

dojo.config是在dojo启动时起作用的,我们有三种方法来配置config

1.在<script>标签中使用data-dojo-config属性

2.在使用dojo核心库前先创建一个dojoConfig对象

3.使用用户自定义编译

?

下面是示例

1.通过属性来配置

这是比较流行一种做法,一般是在引用核心dojo库时使用这个属性

?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Dojo dojo.config Tutorial</title>
    <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/dojo/1.7/dojo/dojo.js"
            data-dojo-config="parseOnLoad: true, isDebug: true"></script>
</head>
<body>
    <p>...</p>
</body>
</html>

?

注意:使用data-atrribute的这种写法是从1.6版本开始推荐的一种方法,以前的djConfig方法虽然到2.0版本都还能用,但已经是不建议使用的了。

在data-dojo-config中是使用逗号分割每个属性的。

注意:如果你通过了一个代理重写了HTML的内容影响了内容的脚本内容从而可能会使dojo功能失效。现在已经知道的是通过UMTS宽带连接是会出现这个问题的。

?

2.创建对象来配置

如果配置的内容比较多的话,使用创建对象来配置会好些。在引用dojo核心库前先配置对象

?

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Dojo dojoConfig Tutorial</title>
    <script type="text/javascript">
        var dojoConfig = {
            parseOnLoad: true,
            isDebug: true,
            locale: 'en-us',
            extraLocale: ['ja-jp']
        };
    </script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.7/dojo/dojo.js"></script>
</head>
<body>
    <p>...</p>
</body>
</html>

?

?在这个例子里,我们设置了本地化为英国,但是对于日本的资源也加载进来。

通过属性配置或使用对象配置,其作用都是一样的。在加载完成后,dojo.config就是全局的一个实例。因此它也就经常是作为一个只读属性而出现。

?

3.通过自定义创建

关于自定义构建的信息参见 dojo构建系统脚本文档

?

设置参数

?

好了,现在你知道如何设置全局参数来使用dojoConfig,你可能想知道怎么进行参数设置。一个快速参考的方法是去查dojo.config的的API。

?

你在dojoConfig中的设定是用来覆盖默认设置:

告诉dojo的加载调试核心库资源

告诉dojo的语言和本地化资源加载核心库

告诉道场在哪里能找到事件中的关键资源,如你使用的是一个定制的命名方案或跨域(xdomain)建立的资源

下面,我们将详细描述下这些配置设置

?

?

设置调试参数

?

dojoConfig可以快速简便的设置调试功能的开启和关闭。无论您是否正在使用一个自编译的,或解压缩的dojo源码,您都可以使用调试功能,使用的参数如下:

?

isDebug:true

当设置为“true”,isDebug将加载Dojo的扩展调试工具,通过Firebug的,或精简版的Firebug。无论您使用何种浏览器,你都可以得到一个调试窗口。在调试控制台中,你可以运行任意代码语句,通过内置的Dojo的控制台转出功能还可以查看报表输出。这个设置的默认值是“假”。

?

debugContainerId:“yourContainerId”

如果指定了ID,而在页面展现时dojo将寻找指定id的元素,并将该元素放入到Firebug Lite的控制台窗口。这允许开发人员在控制台窗口显示额外的信息,并轻松地在自己的脚本来引用。默认情况下,ID是没有关联的。

?

debugAtAllCosts:true(dojo小于1.7的版本)

此设置强制使用的xdomain装载机,以确保所有加载的模块有自己的脚本标记。这使错误消息中的实际行号,在大多数的调试工具和脚本的URL的有完整的列表。有更多的信息在在这里与Dojo的调试。请注意如果你的代码依赖于同步装载机,即不裹在dojo.ready/ dojo.ready而你传递一个变量dojo.require(而不是字符串文字),将可能破坏你的应用程序。

版本1.6有此设置的问题; http://bugs.dojotoolkit.org/ticket/12608更多信息,请参阅。它已经在1.7中删除,请参阅发行说明。


设置国际化参数
适用于I18N的两个dojoConfig变量:

locale: “en-us”
默认情况下,根据浏览器navigator对象的语言环境确定应用程序的语言环境。然而,开发人员可以强制使用应用服务器中的区域设置,建立基于用户偏好的语言环境的默认语言环境。 Dojo的语言环境设置,必须是建立在初始化时,初始化之后就不能更改。参数是一个字符串数组代表的语言环境。语言字符以破折号分开且所有字符小写。

extraLocale: [“ja-jp”]
要加入多语言环境,开发人员可以指定额外的locale文件,也可以指定一个语言环境的集合。
用户多语言切换的情况下使用extraLocale。它通常是更有效和首选的重载页面方案。

设置指定文件夹路径
有时,开发人员可能选择在标准位置(即相对路径下的dojo/dojo.js的核心文件)的资源没有找到。在这种情况下,有必要告诉dojo在哪里可以找到这些资源。如下此提供dojoConfig参数:

baseUrl: “/assets/mydojo/”
当同进使用多个版本的道场在给定的站点,或已更名为创建一个自定义生成的baseURL参数应该用来表示核心dojo.js文件时,在使用<base>标记时可以误导一些浏览器(如IE6中)的网站。baseURL的值应该包含dojo.js文件的目录。该值应始终定义结束斜杠(/)字符。
paths: {“myApp”:”/other/path/to/myApp”}

modulePaths: {“foo”: ”../../bar”}
在1.7之前。是一些过时的路径配置标志。使用这个参数相当于调用dojo.registerModulePath(“foo”, ”../../bar”) ,这可以让dojo找到自定义模块。有关创建和使用自定义模块的更多信息,请参阅dojo.registerModulePath。

其它的一些设置
afterOnLoad: true
(默认为false)。如果设置为true,则会在页面加载完成后把dojo注入到页面中。只有自定义构建dojo的才有效,正常的版本无效。
var dojoConfig = { afterOnLoad:true };
window.onload = function(){
    var d = document.getElementsByTagName("head")[0].appendChild(document.createElement('script'));
    d.src = "my/dojo.js";
    d.type = "text/javascript";
}
?skipIeDomLoaded: false
只针对IE,将跳过DOMContentLoaded方法,如果有的功能是要在DOM加载后才能起效的,这可能会导致错误。如果这个设置为true,则dojo.ready是不会被触发的,除非有事件来触发。如果你想能立即触发,可以在页面底部加上一个dojo._loadInit()函数,如果使用了多个版本的,记住要改dojo的这个名子

设置dojo的模块
这是dojo最后一个配置的方法。由于dojoConfig是一个全局的配置,如果要创建一个新的dojox模块,就可以使用全局的一些配置和资源了。对于模块资源的配置,最好去去API或源码中查怎么来配置,一个不错的例子就是dojox.storage这个模块,这是个储存功能的模块。可以设置成由哪个储存提供商(google),禁用和启用等等
var dojoConfig = { disableWhatWGStorage: true }
?
在代码中使用自定义的dojoConfig
全局配置十分有用。你也可以配置你自定义的一些配置。
在dojo.js加载完成以后,dojoConfig中的配置参数又会被传到dojo.config中,在这时你就可以来解析你自定义的配置了。
var dojoConfig = { parseOnLoad:true, myCustomVariable:true }
?上面,我们定义了一个自定义的myCustomVariable这个配置参数。要使用参数有用,则要使用dojo.config来设置。
// Dojo 1.7+ (AMD style)
require(["dojo/_base/declare", "dojo/_base/config"], function(declare, config){
    declare("my.Thinger", null, {
        thingerColor: (config.myCustomVariable ? "wasTrue" : "wasFalse"),
        constructor: function(){
            if(config.myCustomVariable){ ... }
        }
    });
});

// Dojo < 1.7
dojo.declare("my.Thinger", null, {
    thingerColor: (dojo.config.myCustomVariable ? "wasTrue" : "wasFalse"),
    constructor: function(){
        if(dojo.config.myCustomVariable){ ... }
    }
});
?

兼容性
向下兼容,废弃的djConfig当前还可以使用。
注意,如果同时使用dojoConfig和djConfig,则djConfig将会被忽略
还要注意,如果dojoConfig,djConfig,data-dojo-config同时使用时,将优先使用data-dojo-config

?