Javascript ``模板语法-优雅递减

Javascript ``模板语法-优雅递减,javascript,ecmascript-6,Javascript,Ecmascript 6,新的javascript模板语法很棒。超级可读和强大。我想开始使用它 我尝试了这个模板: function addGalleryItem(imageData, file) { try { var template = ` <section class="imageGalleryItem"> <img src="${imageData}"/> <div c

新的javascript模板语法很棒。超级可读和强大。我想开始使用它

我尝试了这个模板:

function addGalleryItem(imageData, file) { 
    try {
        var template = `
            <section class="imageGalleryItem">
                <img src="${imageData}"/>
                <div class="itemTools" id="${file.name}">
                    <input type="text" class="description" name="description" placeholder="Description"/> <br />
                    <input type="button" name="mainImage" value="Main Image" onclick="makeMain(this)"/>
                    <input type="button" name="remove" value="Remove" onclick="removeImage(this)"/>
                </div>
            </section>
        `;
    } catch { 
        var template = '<section class="imageGalleryItem">' +
            '   <img src="' + imageData + '" />' +
            '   <div class="itemTools" id="' + file.name + '">' +
            '       <input type="text" class="description" name="description" placeholder="Description"/>'+
            '       <br />' +
            '       <input type="button" name="mainImage" value="Main Image" onclick="makeMain(this)"/>' +
            '       <input type="button" name="remove" value="Remove" onclick="removeImage(this)"/>' +
            '   </div>' +
            '</section> ';
    }

    $('#imageGallery').append(template);

}
函数addGalleryItem(图像数据,文件){
试一试{
变量模板=`

`; }捕获{ 变量模板=“”+ ' ' + ' ' + ' '+ “
”+ ' ' + ' ' + ' ' + ' '; } $('#imageGallery')。附加(模板); }
但是亲爱的IE因为反标记(`)而抱怨语法错误。携带令人敬畏的边缘,并没有提到要为IE做什么


有没有一种方法可以直接将新的模板语法用于今天的生产使用?还是我们一直在传输?

您不能使用try…catch语句来捕获语法错误,因为它们甚至在代码执行之前就被抛出了


您要么放弃对不支持模板文本的浏览器的支持,要么使用Babel

不能使用try…catch语句捕获语法错误,因为它们甚至在代码执行之前就被抛出了


您要么放弃对不支持模板文本的浏览器的支持,要么使用Babel

通常,您可以使用
eval
断言浏览器是否支持某些语法更改:

var isTemplateSupported = true;
try {
    eval("``");
}
catch(e) {
    isTemplateSupported = false;
}
console.log("Supports Template Literals", isTemplateSupported);
因此,对于您的实施:

var template;
try {
    template = eval("`<section class=\"imageGalleryItem\">`".....);
}
catch(e) {
    if(e instanceof SyntaxError) {
        template = '<section class="imageGalleryItem">' + ...
    }
}
var模板;
试一试{
模板=eval(“``”…);
}
捕获(e){
if(SyntaxError的e实例){
模板=“”+。。。
}
}

但是使用transpiler要容易得多,因为每次需要文本时支持两个实现会很繁琐。

通常,如果浏览器支持某些语法更改,您可以使用
eval
来断言:

var isTemplateSupported = true;
try {
    eval("``");
}
catch(e) {
    isTemplateSupported = false;
}
console.log("Supports Template Literals", isTemplateSupported);
因此,对于您的实施:

var template;
try {
    template = eval("`<section class=\"imageGalleryItem\">`".....);
}
catch(e) {
    if(e instanceof SyntaxError) {
        template = '<section class="imageGalleryItem">' + ...
    }
}
var模板;
试一试{
模板=eval(“``”…);
}
捕获(e){
if(SyntaxError的e实例){
模板=“”+。。。
}
}

但是,使用transpiler要容易得多,因为每次需要一个文本时,支持两个实现将非常繁琐。

使用try…catch-。-@Gothdo是的,我知道,您无法捕获语法错误。我们习惯于展示我们已经尝试过的东西,但我想不出还有什么可以尝试的。如果没有中间步骤,你怎么能使用浏览器不支持的功能?像这样的东西正是巴贝尔解决的问题。你不能用try…catch-。@Gothdo是的,我知道。我们习惯于展示我们已经尝试过的东西,我想不出还有什么可以尝试的。如果没有中间步骤,你怎么能使用浏览器不支持的功能?像这样的东西正是巴贝尔解决的问题。谢谢你的解决方法,我同意,这很麻烦。但至少有些东西是存在的。谢谢你的解决办法,我同意,这很麻烦。但至少有些东西是存在的。