下划线模板:if else语句出错

nev*_*_me 4 underscore.js

我解析下划线模板时出错,我不断收到错误说:

Uncaught SyntaxError: Unexpected token else

以下是模板:使用Jade

script#viewLinksTemplate(type="text/template")
    table.table.table-condensed.table-striped
        caption Available links
        thead
            tr
                td link id
                td Name
                td View
                td Edit
                td Remove
        tbody
            {[ _.each(routes, function(route) { ]}

            tr
                td {{ route._id }}
                {[ if (typeof route.name !== 'undefined') { ]}
                td {{ route.name }}
                {[ } ]}
                {[ else { ]}
                td {{ route.stations.start.name }} - {{ route.stations.end.name }}
                {[ }; ]}
                td
                    a.btn.btn-primary(href="/route") View Route
                td
                    a.btn.btn-warning Edit Route
                td
                    a.btn.btn-danger Delete Route
            {[ }); ]}
Run Code Online (Sandbox Code Playgroud)

问题似乎在if/else语句中.当我完全删除它时,会渲染模板上剩下的部分.

那么,我错过了语法的东西吗?我的所有其他模板都有javascript,并正确呈现,除了这个与if/else.

谢谢

fre*_*osh 9

这是因为if语句的结尾和else两个不同的评估标签.通过替换将它们合并为一个:

{[ } ]}
{[ else { ]}
Run Code Online (Sandbox Code Playgroud)

有:

{[ } else { ]}
Run Code Online (Sandbox Code Playgroud)

  • 这是Underscore如何构建模板的问题.它本质上构建了一个字符串`eval`,并且生成的代码构建了一个包含HTML输出的字符串.当它遇到JS来评估它关闭HTML时,插入你的JS并再次打开HTML.当你有单独的标签时,内置字符串看起来像`if(condition){html + ='html inside if if ;; } html + =''; else {html + ='inside else'`,这显然是无效的JS. (2认同)