dojo 常用函数

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");//true
	lang.isString(123);//false
});

dojo.isArray、dojo.isArrayLike

用于判断所传参数是否为数组。两者的区别是:dojo.isArrayLike来检测类似数组的对象。例如:arguments对象
require(["dojo/_base/lang"],function(lang){
	lang.isArray([1,2,3]);//true
	lang.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  undefined
	lang.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 scope
	lang.exists("foo.bar"); // true
	lang.exists("foo.bar.baz"); // false

	// search from a particular scope
	lang.exists("bar", foo); // true
	lang.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 DomNode
	var node = dom.byId("someNode");
	var newnode = lang.clone(node);
	attr.set(newnode, "id", "someNewId");
	// clone an object
	var obj = { a:"b", c:"d" };
	var thing = lang.clone(obj);
	// clone an array
	var newarray = lang.clone(["a", "b", "c"]);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值