dojo 常用函数

来源:互联网 发布:telnet命令 windows 编辑:程序博客网 时间:2024/05/16 08:36

dojo.trim

用于去除字符串前后空格
require(["dojo/_base/lang"],function(lang){function trim(str){return "-"+lang.trim(str)+"-";}trim(" meng");//-meng-trim("meng ");//-meng-trim(" meng ");//-meng-trim(" meng meng");//-meng meng-});

dojo.replace

用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
require(["dojo/_base/lang","dojo/_base/array"],function(lang,array){//使用替换的字典:lang.replace("Hello, {name.first} {name.last} AKA {nick}!",{nick: "Bob",name: {first:"Robert",middle: "X",last:"Cringely"}});// returns: Hello, Robert Cringely AKA Bob!//使用替换的数组:lang.replace("Hello, {0} {2}!",["Robert", "X", "Cringely"]);//returns: Hello, Robert Cringely!//使用替换的函数:function sum(a){var t = 0;array.forEach(a, function(x){ t += x; });return t;}lang.replace("{count} payments averaging {avg} USD per payment.",lang.hitch({ payments: [11, 16, 12] },function(_, key){switch(key){case "count": return this.payments.length;case "min":return Math.min.apply(Math, this.payments);case "max":return Math.max.apply(Math, this.payments);case "sum":return sum(this.payments);case "avg":return sum(this.payments) / this.payments.length;}}));//returns:"3 payments averaging 13 USD per payment."//使用替换另一个PHP模式:lang.replace("Hello, ${0} ${2}!",["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g);//returns:"Hello, Robert Cringely!"});

dojo.isString

用于判断所传参数是否为字符串
require(["dojo/_base/lang"],function(lang){lang.isString("mengmeng");//truelang.isString(123);//false});

dojo.isArray、dojo.isArrayLike

用于判断所传参数是否为数组。两者的区别是:dojo.isArrayLike来检测类似数组的对象。例如:arguments对象
require(["dojo/_base/lang"],function(lang){lang.isArray([1,2,3]);//truelang.isArray("1,2,3");//false});

dojo.isFunction

用于判断所传参数是否为函数对象。注意,这对于由dojo.declare 所创建的类(的构造函数)也一样有效。一个常见的模式是,得到一个字符串形式的类名全称,你可以用 dojo.isFunction来判断是否需要将其转换为一个函数:
require(["dojo/_base/lang"],function(lang){var thing = "dijit.form.Button";   if(!lang.isFunction(thing)){       thing = lang.getObject(thing);//转为对象}   var button= new thing({ name:"meng" });  console.info(button.domNode);});

dojo.isObject

用于检测所传参数是否为对象。

dojo.isAlien

用于检测所传参数是否为内建函数。此方法将在2.0版本移除

dojo.mixin

用于扩展实例对象。是将两个对象从右到左组合起来,覆盖最左边的对象,并且返回混入后的对象。
require(["dojo/_base/lang"],function(lang){var obj={name: "Frylock",braces: true};lang.mixin(obj,{name: "Carl Brutanananadilewski"});//obj={name: "Carl Brutanananadilewski",braces: true}});

dojo.extend

用于扩展一个对象的原型。和mixin 一样是将右侧对象的成员直接合并进入第一个参数的对象。
require(["dojo/_base/lang","dijit/Dialog"],function(lang,Dialog){//dijit.Dialog扩展一个setTitle方法lang.extend(Dialog,{setTitle:function(name){this.set('title',name)};})});

dojo.setObject

在对象 context中创建名称为 name,值为 value的属性。属性 name同样支持“.”分隔的形式.不指定 context对象时默认为全局对象。
var obj={};if(!obj["parent"]){ obj.parent = {}; }obj.parent.prop = "some value";
通过这个例子可以看出在JS中如果要给obj对象中的parent对象设置prop属性时,需要判断obj中的parent是否存在,如果不存在则创建一个空对象。使用dojo.setObject 则可以简化。
require(["dojo/_base/lang"],function(lang){lang.setObject("parent.prop", "some value", obj);});

dojo.getObject

方法用来从 context对象中获取名为 name的属性。name属性支持类似 com.example.abc这样的“.”分隔的形式。如果指定参数 create的值为 true,当属性 name不存在的时候,会创建该属性并设置其值为空对象。不指定 context对象时默认为全局对象。
require(["dojo/_base/lang"],function(lang){var foo = {bar: "some value"};lang.getObject("foo.bar");  // returns "some value"lang.getObject("foo.barz"); // returns  undefinedlang.getObject("foo.barz",true);// returns foo.baz - an empty object {}lang.getObject("bar", false, foo); // returns "some value"});

dojo.exists

用于检查一个字符串中利用点号’.’分隔的所有对象是否存在。在需要检测一个较长的对象路径时,使用dojo.exists会很方便。
require(["dojo/_base/lang"],function(lang){var foo = {bar: {}};// search the global scopelang.exists("foo.bar"); // truelang.exists("foo.bar.baz"); // false// search from a particular scopelang.exists("bar", foo); // truelang.exists("bar.baz", foo); // false});

dojo.hitch

它返回一个函数,它将在一个给定的范围内执行一个给定的函数。此功能允许您控制函数执行的方式,特别是在异步操作中。
require(["dojo/_base/xhr"],function(xhr){var args = {  url: "foo",  load: this.dataLoaded};xhr("GET",args);});
这段代码执行会怎么样呢?会报错。说dataLoaded不是个方法,或找不到。为什么呢。从代码中可以看出参数args的load想调用外部一个dataLoaded的方法。但是this引用却指向了args。而args里面可没有dataLoaded。
如何解决呢?
require(["dojo/_base/lang","dojo/_base/xhr"],function(lang,xhr){var args = {  url: "foo",  load: lang.hitch(this, "dataLoaded")};xhr("GET",args);});
用dojo.hitch来控制dataLoaded函数执行的作用域为this,这个问题也就迎刃而解了。

dojo.partial

用于控制传递给函数的参数。可设置函数的第一个参数为自定义的参数,其余参数为可变化的。
require(["dojo/_base/lang","dojo/_base/xhr"],function(lang,xhr){var dataLoaded = function(someFirstParam, data, ioargs){};   var args = {       url: "foo",       load: dataLoaded   };   xhr("GET",args); });
那么,当xhr请求返回的时会调用 dataLoaded函数 ,但是xhr 请求 load函数期待的参数结构应该是: load(data, ioargs)。那么在 dataLoaded的第一个参数已经确定为 "someFirstParam"的情况下,我们如何去保证 xhrGet对于参数的要求能得到满足 ? 使用 dojo.partial!
require(["dojo/_base/lang","dojo/_base/xhr"],function(lang,xhr){var dataLoaded = function(someFirstParam, data, ioargs){};   var args = {       url: "foo",       load: lang.partial(dataLoaded, "firstValue");   };   xhr("GET",args);  });
它所做的是创建一个新的函数,这个函数封装了 dataLoaded函数并且指定了第一个参数 "firstValue"。需要注意的是, dojo.partial允许你指定多个参数,因此你可以定义任意数量的参数作为函数固定前置的参数。

dojo.clone

用于克隆对象或者DOM节点。返回克隆后一个新的对象或者DOM节点。
require(["dojo/_base/lang","dojo/dom", "dojo/dom-attr"], function(lang, dom, attr){//clone an DomNodevar node = dom.byId("someNode");var newnode = lang.clone(node);attr.set(newnode, "id", "someNewId");// clone an objectvar obj = { a:"b", c:"d" };var thing = lang.clone(obj);// clone an arrayvar newarray = lang.clone(["a", "b", "c"]);});

0 0