在Handlebars模板中运行JavaScript

时间:2014-03-18 15:23:53

标签: javascript handlebars.js

我想在我的车把模板中执行一些Javascript代码。通常在应用程序中我这样做

<script type="text/javascript">
    var @Model.JavascriptVariableName;
    $(function () {
        @Model.JavascriptVariableName = new TagInput()
            .withAvailableTags(@Html.Raw(Model.AvailableTagsJson))
            .withAppliedTags(@Html.Raw(Model.AppliedTagsJson))
            .withMinCharsAutocomplete(@Model.MinCharsAutocomplete)
            .allowBackspaceDelete(@Model.DeleteWithBackspace.ToString().ToLowerInvariant())
            .allowNewTags(@Model.AllowNewTags.ToString().ToLowerInvariant())
            .initialize($('#@Model.ElementId'), $('#@(Model.ElementId)_hidden'));
        @if(Model.OnChangeJavascript.IsNotNullOrEmpty()) {
            @:@(Model.JavascriptVariableName).onChange = function () { @Html.Raw(Model.OnChangeJavascript) }
        }
    });
</script>

但是因为我已经在一个把手模板里面了,所以我试图插入$(function(){})只是作为有意义的文本吐出来的<script type="text/x-handlebars-template" id="tagsTemplate"> <div>Tags</div> var @Model.JavascriptVariableName; $(function () { @Model.JavascriptVariableName = new TagInput() .withAvailableTags(@Html.Raw(Model.AvailableTagsJson)) .withAppliedTags(@Html.Raw(Model.AppliedTagsJson)) .withMinCharsAutocomplete(@Model.MinCharsAutocomplete) .allowBackspaceDelete(@Model.DeleteWithBackspace.ToString().ToLowerInvariant()) .allowNewTags(@Model.AllowNewTags.ToString().ToLowerInvariant()) .initialize($('#@Model.ElementId'), $('#@(Model.ElementId)_hidden')); @if (Model.OnChangeJavascript.IsNotNullOrEmpty()) { @:@(Model.JavascriptVariableName).onChange = function () { @Html.Raw(Model.OnChangeJavascript) } } }); </script> 。那么如何在把手内部创建一些动态Javascript ???

{{1}}

上述代码无效。

1 个答案:

答案 0 :(得分:1)

除非您使用handlebar编译网页服务器端,否则我不明白为什么每次都需要等待window Ready事件:$(function(){})实际上包裹了一个函数,以确保它只有在DOM准备好(已加载)时才会触发。 如果需要,您可以在代码中跳过该部分。

我强烈反对将JS代码放在一个模板中:为什么不对这些代码进行概括,并使用Handlebars编译一些带有id或类的DOM东西,你可以在你的&#34;泛型&#34;功能改为?