首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

dojo1.7通译 hello,dojo

2012-06-28 
dojo1.7翻译hello,dojo原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/hello_dojo/?欢迎来

dojo1.7翻译 hello,dojo

原文地址:http://dojotoolkit.org/documentation/tutorials/1.7/hello_dojo/

?

欢迎来到Dojo世界!在本教程中。你将会学到如何去加载和使用dojo的一些核心功能。你也能学到关于dojo的异步模块加载的相关知识,知道如何在你的网页中使用他们,在运行出错时如何得到更多的帮助信息。

?

开始

?

我们将从在一个简单的HTML页面中加载google cdn远程dojo.js来开始。这很简单。

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>Tutorial: Hello Dojo!</title>    <!-- load Dojo -->    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js"               data-dojo-config="async: true"></script></head><body>    <h1 id="greeting">Hello</h1></body></html>

?运行Demo

?

这段代码中加载了dojo,并且可以使用dojo的功能了。在这里你可能注意到了,对于dojo1.7版本中,使用了data-dojo-config这个属性。这是HTML5的特性,这是被用来配置当加载dojo时的一些属性。他可以包含几个属性键值的集合。这里所起的作用和写一个script标签的作用是相同的。

?

CDN版本的dojo并不包含调试的全部功能。在开发时,建议使用下载的SDK版本。

?

与以前的版本相比较。以前的版本叫sync mode(legacy mode)会自己的加载所有的dojo base。在1.7的版本中,只要设置了async:true这个属性,将会切换成async mode(AMD mode)。在这种模式下,一些模块,如fx,xhr和query将不会自己被加载。将只会默认的加载自己的功能。这将真正的实现了需要时再加载的机制。使用1.7版本,将会使你的代码更小运行更快。

?

所有的教程都将使用dojo1.7的基础版本,这有利于你能快速在你的页面中进行开发。

?

使用async模式,将会使用新的AMD加载器来加载模块。这种新的加载器明显的比以前的加载器加载速度要快。

?

定义和加载模块

1.7版本的dojo定义模块时更快在定义文件了。如"my/module/id",这是使用1.7版本来定义模块。事实上,这种定义是直接映射到脚本文件上的,这也就是说,你加载一个"my/module/id"这个模块,也就是加载了"my/module/id.js"这个文件(加载的机制很复杂,但对使用者来说,了解这么多就已经足够了)

?

为了定义和加载模块,对于加载器来说,定义了两种重要的功能。require,用来加载模块。define,用来定义模块。这两种功能都有两个参数,一个是需要模块的ID集合。另一个是加调函数。这通过一个例子能更好的理解。

// In demo/myModule.js (which means this code defines// the "demo/myModule" module): define([    // The dojo/dom module is required by this module, so it goes    // in this list of dependencies.    "dojo/dom"], function(dom){    // Once all modules in the dependency list have loaded, this    // function is called to define the demo/myModule module.    //    // The dojo/dom module is passed as the first argument to this    // function; additional modules in the dependency list would be    // passed in as subsequent arguments.     var oldText = {};     // This returned object becomes the defined value of this module    return {        setText: function(id, text){            var node = dom.byId(id);            oldText[id] = node.innerHTML;            node.innerHTML = text;        },        restoreText: function(id){            var node = dom.byId(id);            node.innerHTML = oldText[id];            delete oldText[id];        }    };});

?这个例子是定义了一个模块,这个模块有一个父类dojo/dom并且定义了两个方法setText和restoreText,现在我们来使用这个模块。

// Require the module we just createdrequire(["demo/myModule"], function(myModule){    // Use our module to change the text in the greeting    myModule.setText("greeting", "Hello Dojo!");     // After a few seconds, restore the text to its original state    setTimeout(function(){        myModule.restoreText("greeting");    }, 3000);});

?运行示例

?

这个示例是把内容<h1 id="greeting">元素替换成了"Hello Dojo!",然后在3秒后恢复成原值。注意,我们没有加载其它的js,加载器会自己的加载运行所必须依赖的其它js模块。


在legacy mode中可以使用dojo.require来加载其它模块,在saync mode中可以使用dojo/require! 插件来加载其它模块。这么做是为了可以兼容以前版本。

?

等待DOM加载

大多部的js框架都提供了等待DOM加载完成再运行js的功能,dojo也不例外。在1.7版本中,这种功能是以一种特殊的模块插件来实现。插件可以像别的模块一样的加载,只不过在加载时,其名称后要加一个感叹号来区分。DOJO提供了名叫dojo/domReady插件。只要简单的在require或define中加入这个模块就可以在DOM加载完成后调用回调函数。

require(["dojo/dom", "dojo/domReady!"], function(dom){    var greeting = dom.byId("greeting");    greeting.innerHTML += " from Dojo!";});

?运行示例

?

上面的例子中,简单的在greeting这个元素中加了一些文字,这个功能只能在DOM已经被加载后才能被执行。还有,要注意,在模块名称后有一个感叹号。没有这个感叹号,dojo/domReady将是只被简单的认为是一个模块而被做为参数传给回调函数。

?

加入视觉效果

只是在文字中加入<h1>并没有什么兴奋的。我们来给它加上一个动画。有个模块可以被用来加入动画效果,这个模块是dojo/fx。好,让我们来加入一个dojo/fx的slideTo方法来看看。

require(["dojo/dom", "dojo/fx", "dojo/domReady!"], function(dom, fx){    // The piece we had before…    var greeting = dom.byId("greeting");    greeting.innerHTML += " from Dojo!";     // …but now, with a fun animation!    fx.slideTo({        top: 100,        left: 200,        node: greeting    }).play();});

?运行示例

?

就像你看到的那样,我们加入了一个新的模块依赖。dojo/fx,然后使用这个模块来加入了动画的效果。

?

热点排行