String mit Variable festlegen, um diesen später in einer arr.map() Funktion zu verwenden
bearbeitet von Rolf BHallo ebody,
oh weh, das geht tatsächlich.
Aber nicht ganz so wie Du es machst.
~~~js
const str = `<li>${item}</li>`;
~~~
wertet `${item}` an Ort und Stelle aus. Das willst Du nicht. Die Idee, das Template erstmal zu speichern und es dann zum passenden Zeitpunkt mit eval auszuwerten, ist aber möglich - du musst das Template dazu in einem String "verstecken". Das geht so:
~~~js
const str = "`<li>${item}</li>`";
const arr = [ "a", "b", "c" ];
let list = array.map(item => eval(str));
~~~
Ja, geht. Ist aber ineffizient. JavaScript muss nun (vermutlich) für jeden Callback das Template neu compilieren. Wenn Du den Callback nicht gleich in array.map notieren willst, dann speichere nicht das Template, sondern die ganze Callback-Funktion in einer Variablen:
~~~js
const makeItem = item => `<li>${item}</li>`;
const arr = [ "a", "b", "c" ];
let list = array.map(makeItem);
~~~
Das Problem der von Dedlfix genannten tagged templates ist zum einen, dass man Tag und Template nicht trennen kann. Du kannst nicht das Template in eine Variable legen und dann später Funktion und Template zusammenbringen. Zum anderen wird auch bei einem tagged template das Template in dem Moment ausgewertet, wo Du es zuweist. Du müsstest also eine Dummy-Variable `item` bereitstellen, damit die Idee eines Funktionsgenerators gelingt, oder in die geschweiften Klammern Zahlen setzen (für: erster Parameter, zweiter Parameter, etc)…
Für
~~~js
const makeItem = funcTemplate`<li>${0}</li>`;
~~~
könnte man eine Funktion `funcTemplate` schreiben, die ihren ersten übergebenen Parameter zwischen die konstanten Bestandteile setzt. Aber ist das besser? Eher nicht.
_Rolf_
--
sumpsi - posui - obstruxi
String mit Variable festlegen, um diesen später in einer arr.map() Funktion zu verwenden
bearbeitet von Rolf BHallo ebody,
oh weh, das geht tatsächlich.
Aber nicht ganz so wie Du es machst.
~~~js
const str = `<li>${item}</li>`;
~~~
wertet `${item}` an Ort und Stelle aus. Das willst Du nicht. Die Idee, das Template erstmal zu speichern und es dann zum passenden Zeitpunkt mit eval auszuwerten, ist aber möglich - du musst das Template dazu in einem String "verstecken". Das geht so:
~~~js
const str = "`<li>${item}</li>`";
const arr = [ "a", "b", "c" ];
let list = array.map(item => eval(str));
~~~
Ja, geht. Ist aber ineffizient. JavaScript muss nun (vermutlich) für jeden Callback das Template neu compilieren. Wenn Du den Callback nicht gleich in array.map notieren willst, dann speichere nicht das Template, sondern die ganze Callback-Funktion in einer Variablen:
~~~js
const makeItem = item => `<li>${item}</li>`;
const arr = [ "a", "b", "c" ];
let list = array.map(makeItem);
~~~
Das Problem der von Dedlfix genannten tagged templates ist zum einen, dass man Tag und Template nicht trennen kann. Du kannst nicht das Template in eine Variable legen und dann später Funktion und Template zusammenbringen. Zum anderen wird auch bei einem tagged template das Template in dem Moment ausgewertet, wo Du es zuweist. Du müsstest also eine Dummy-Variable `item` bereitstellen, damit die Idee eines Funktionsgenerators gelingt, oder in die geschweiften Klammern Zahlen setzen (für: erster Parameter, zweiter Parameter, etc).
Für
~~~js
const makeItem = funcTemplate`<li>${0}</li>`;
~~~
könnte man eine Funktion `funcTemplate` schreiben, die ihren ersten übergebenen Parameter zwischen die konstanten Bestandteile setzt. Aber ist das besser? Ich weiß nicht...
_Rolf_
--
sumpsi - posui - obstruxi
String mit Variable festlegen, um diesen später in einer arr.map() Funktion zu verwenden
bearbeitet von Rolf BHallo ebody,
oh weh, das geht tatsächlich.
Aber nicht ganz so wie Du es machst.
~~~js
const str = "`<li>${item}</li>`";
~~~
wertet `${item}` an Ort und Stelle aus. Das willst Du nicht. Die Idee, das Template erstmal zu speichern und es dann zum passenden Zeitpunkt mit eval auszuwerten, ist aber möglich - du musst das Template dazu in einem String "verstecken". Das geht so:
~~~js
const str = "`<li>${item}</li>`";
const arr = [ "a", "b", "c" ];
let list = array.map(item => eval(str));
~~~
Ja, geht. Ist aber ineffizient. JavaScript muss nun (vermutlich) für jeden Callback das Template neu compilieren. Wenn Du den Callback nicht gleich in array.map notieren willst, dann speichere nicht das Template, sondern die ganze Callback-Funktion in einer Variablen:
~~~js
const makeItem = item => `<li>${item}</li>`;
const arr = [ "a", "b", "c" ];
let list = array.map(makeItem);
~~~
Das Problem der von Dedlfix genannten tagged templates ist zum einen, dass man Tag und Template nicht trennen kann. Du kannst nicht das Template in eine Variable legen und dann später Funktion und Template zusammenbringen. Zum anderen wird auch bei einem tagged template das Template in dem Moment ausgewertet, wo Du es zuweist. Du müsstest also eine Dummy-Variable `item` bereitstellen, damit die Idee eines Funktionsgenerators gelingt, oder in die geschweiften Klammern Zahlen setzen (für: erster Parameter, zweiter Parameter, etc).
Für
~~~js
const makeItem = funcTemplate`<li>${0}</li>`;
~~~
könnte man eine Funktion `funcTemplate` schreiben, die ihren ersten übergebenen Parameter zwischen die konstanten Bestandteile setzt. Aber ist das besser? Ich weiß nicht...
_Rolf_
--
sumpsi - posui - obstruxi