2015-04-21 18 views
15

Więc mam ten string:Jak mogę utworzyć ciąg szablonów ze zwykłego łańcucha?

var name = "Chaim"; 
var templateStr = "Hello, my name is ${name}"; 

Jak mogę przekonwertować go do szablonu-string tak, że wynik będzie równy:

var template = `Hello, my name is ${name}`; 

Czy istnieje sposób programowo zbudować szablon dosłowny?

+1

Nie można bez 'eval', i nie sądzę, że chcesz. Dlaczego po prostu nie użyć łańcucha szablonów? – Bergi

+0

Ponieważ chcę przekazać dynamiczny ciąg znaków, który będzie używany jako szablon. – haim770

+0

@ haim770 Dlaczego ciąg dynamiczny nie może być literałem szablonu? – thefourtheye

Odpowiedz

26

Czy istnieje sposób programowo skonstruować szablon literał?

Nie "programowo" i "dosłownie" są antytetyczne (poza tym, że jesteś w królestwie kompilatorów).

Ciągi szablonów powinny być lepiej nazwane interpolowane literały ciągów znaków lub więcej. Proszę do not confuse them with templates. Jeśli chcesz używać dynamicznie tworzonych ciągów do szablonów, użyj silnika szablonów do wyboru.

oczywiście literałów szablonu może pomóc w realizacji takich, a może uciec od czegoś prostego jak

function assemble(literal, params) { 
    return new Function(params, "return `"+literal+"`;"); // TODO: Proper escaping 
//    ^^^^^^^^ working in real ES6 environments only, of course 
} 
var template = assemble("Hello, my name is ${name}", "name"); 
template("Chaim"); // Hello, my name is Chaim 
+2

'Ciągi z szablonów powinny być lepiej nazwane interpolowanymi literałami ciągów' - Czy nie nazywa się ich quasi literałami? – thefourtheye

+0

Programowo ≠ Litteral jest tutaj kluczem. –