【问题标题】:IntelliJ IDEA 14 does not recognize spacebars templatesIntelliJ IDEA 14 无法识别空格键模板
【发布时间】:2015-12-04 20:00:40
【问题描述】:

我正在写simple meteor app,发现 IntelliJ IDEA 14.1.4(安装并启用了 Meteor 和 Handlebars 插件)无法识别空格键模板:

谷歌搜索后,我尝试了File > Invalidate Caches/Restart,但这不起作用。

我还发现当我运行Code > Reformat Code 时,生成的缩进是不正确的。我认为这两个问题是相关的。

这里有一个更简单的问题说明:

如何调试?

【问题讨论】:

  • 根据您的屏幕截图,if 块尚未正确关闭。 {{#if currentUser}} ... {{/if}}
  • 我没有在屏幕截图中显示整个文件,但我相信if 块确实已正确关闭。这是source。请注意,屏幕截图还显示了一个 each 块,该块被 IntelliJ 标记为错误,但明显关闭了两行。
  • 我仔细扫描了您的来源,发现每个空格键{{...}} 都错过了缩进。我会发布一个答案以更清楚地显示它。

标签: meteor intellij-idea syntax-highlighting handlebars.js spacebars


【解决方案1】:

最后,我在 IntelliJ IDEA 14 中发现了一个非常棘手的语法错误。
主要问题是{{#/ 之间的空格。
{{#if currentUser}} 在语法上是正确的,但{{ #if currentUser }} 是错误的。
同样,用户 {{/if}} 而不是 {{ /if }}
所以空格键的使用在这里非常严格。其实应该没有多余的空格。

<template name="home">
    {{#if currentUser}}
        <div class="template-home">
            <div class="well">
                <form class="form-inline syllabus-chooser">
                    <div class="form-group">
                        <select name="syllabusChooser" id="syllabusChooser" class="form-control">
                            <option value="0">(Select a syllabus to edit)</option>
                            {{#each syllabusSelectors}}
                                <option value="{{ value }}">{{ label }}</option>
                            {{/each}}
                        </select>
                    </div>
                    <button type="submit" id="syllabusChooserButton" class="btn btn-default">Edit</button>
                </form>
            </div>

            {{#if displayID}}
                <div class="well">
                    {{#autoForm collection="Syllabuses" doc=selectedSyllabusDoc id="insertSyllabusForm" type="update"}}
                        <fieldset>
                            <div class="row">
                                <div class="col-sm-2">{{> afQuickField name='alphaNumber' placeholder="ICS 101"}}</div>
                                <div class="col-sm-2">{{> afQuickField name='creditHours' placeholder="3"}}</div>
                                <div class="col-sm-2">{{> afQuickField name='prerequisites' placeholder="311 or consent"}}</div>
                                <div class="col-sm-6">{{> afQuickField name='title' placeholder="Course title"}}</div>
                            </div>
                            <div class="row">
                                <div class="col-sm-6">{{> afQuickField name='instructor' rows=2 placeholder="Name\noffice address, email"}}</div>
                                <div class="col-sm-6">{{> afQuickField name='textbooks' rows=2 placeholder= "Textbook title and author, or 'none'"}}</div>
                            </div>
                            <div class="row">
                                <div class="col-sm-6">{{> afQuickField name='objectives' rows=4 placeholder='* Students have ...\n* Students can ...\n* Students can ....'}}</div>
                                <div class="col-sm-6">{{> afQuickField name='policies' rows=4 placeholder="Can be 'none'."}}</div>
                            </div>
                            <div class="row">
                                <div class="col-sm-6">{{> afQuickField name='description' rows=4 placeholder='Insert course catalog description: http://www.catalog.hawaii.edu/courses/departments/ics.htm'}}</div>
                                <div class="col-sm-6">{{> afQuickField name='grading' rows=4 placeholder="5 homework assignments (10% each)\n1 midterm (15%)\n1 final exam (15%)\n1 final project (20%)"}}</div>
                            </div>
                            <div class="row">
                                <div class="col-sm-6">{{> afFormGroup name='learningOutcomes' type="select-checkbox"}}</div>
                                <div class="col-sm-6">
                                    {{> afQuickField name='courseLearningOutcomes' rows=12 placeholder="* Learning Outcome 1\n* Learning outcome 2"}}
                                    {{> afQuickField name='schedule' rows=12 placeholder="Week 1: ...\nWeek 2: ...\nWeek 3: ..."}}
                                </div>
                            </div>
                        </fieldset>
                        <button type="submit" class="btn btn-default btn-success btn-block">Save</button>
                    {{/autoForm}}
                </div>
            {{/if}}
        </div>

        <div class="well" style="padding: 0; max-height: 100px; overflow-y: auto">
            <ul>
                {{#each editStatusList}}
                    <li>Started editing {{ syllabusName }} {{ editTimestamp }}  {{#if editFinished}} ... finished. {{/if}} </li>
                {{/each}}
            </ul>
        </div>
    {{/if}}
</template>

【讨论】:

  • 感谢您的建议。当我将您的代码粘贴到我的应用程序中的新文件中时:(a)我仍然得到相同的突出显示的错误,并且(b)缩进变得错误!让我问你这个问题:如果你把我的原始源代码放到你的 IntelliJ 中,然后做Code &gt; Reformat Code,它会恢复正确的缩进吗?还是我的原始来源对您也有错误?
  • 我刚刚在原始问题中添加了一个新的屏幕图像,以显示一个包含突出显示错误的更简单的文件。
  • @PhilipJohnson,很抱歉回复晚了。我在 IntelliJ 中尝试了代码,发现了真正的错误。查看我的新编辑并粘贴代码。祝你好运。
  • 天才!固定的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2022-10-04
  • 2022-12-17
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多