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!