Javascript ``模板语法-优雅递减
新的javascript模板语法很棒。超级可读和强大。我想开始使用它 我尝试了这个模板:Javascript ``模板语法-优雅递减,javascript,ecmascript-6,Javascript,Ecmascript 6,新的javascript模板语法很棒。超级可读和强大。我想开始使用它 我尝试了这个模板: function addGalleryItem(imageData, file) { try { var template = ` <section class="imageGalleryItem"> <img src="${imageData}"/> <div c
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是的,我知道。我们习惯于展示我们已经尝试过的东西,我想不出还有什么可以尝试的。如果没有中间步骤,你怎么能使用浏览器不支持的功能?像这样的东西正是巴贝尔解决的问题。谢谢你的解决方法,我同意,这很麻烦。但至少有些东西是存在的。谢谢你的解决办法,我同意,这很麻烦。但至少有些东西是存在的。