Úplná úžasnost s dojo.partial a funkcí MooTools.partial

Podobně jako MooTools, i Dojo Toolkit obsahuje řadu jazykových pomocníků JavaScript. Jedním z těchto pomocníků je dojo.partial . Tato metoda, která žije v Dojo Base, vám umožňuje volat metodu s dalšími argumenty připojenými na začátek podpisu funkce. Zní to trochu divně? Mě to udělalo taky. Pojďme se rychle podívat na dojo.partial syntaxi 's a kdy ji použijete.

dojo.partial

Řekněme, že máte funkci, jejímž hlavním účelem je umístit obsah do uzlu:

// A sample function which could use partial
function placeContent(node, content) {
	node.innerHTML = content;
}

Všimněte si, že funkce očekává dva argumenty:node a content . Toto je jednoduchá, univerzální funkce, kterou lze použít kdekoli a mnoha různými funkcemi, že? Nyní řekněme, že dělám xhrGet zavolejte:

dojo.xhrGet({
	url: "content.html",
	load: function(content, ioArgs) {  }
});

Podpis load metoda je (content , ioArgs ). Chcete-li použít můj placeContent funkce s load handler, budete muset kódovat:

dojo.xhrGet({
	url: "content.html",
	load: function(content, ioArgs) {
		placeContent("myNode", content);
	}
});

To není to nejhorší na světě, ale je to trochu...meh. Pomocí dojo.partial , mohli bychom místo toho kódovat:

dojo.xhrGet({
	url: "content.html",
	load: dojo.partial(placeContent, "myNode")
});

I když první argument z load podpis zpětného volání je obsah, dojo.partial call přesune poskytnuté argumenty na začátek argument seznam, čímž umístíte node argument před content argument při použití s ​​placeContent . dojo.partial nám umožňuje vyhnout se používání "zabalovacích" funkcí pro přidání argumentu do arguments pole. dojo.partial umožňuje přidat libovolný počet argumentů, které lze vložit na začátek podpisu, nikoli pouze jeden.

Function.partial

V krátkosti jsem duplikoval dojo.partial funkce pro MooTools:

// The implementation
Function.implement("partial", function(/* all args */) {
	var self = this, args = Array.from(arguments);
	return function() {
		self.apply(this, args.append(arguments));
	};
});

Příklad použití by vypadal takto:

new Request({
	url: "partial.html",
	//onComplete: myFn.partial("myNode").bind(this)
	onComplete: placeContent.partial("myNode")
}).send();

Stejně snadné použití jako metoda Dojo a stejně užitečné. Líbí se mi, že tato metoda umožňuje přeskočit psaní obalů zpětného volání na jednom řádku a vám umožní ponechat si podpisy funkcí utility tak, jak jsou. dojo.partial a Function.partial jsou plně FTW!