如何停止迪朗达尔/ jQuery的意见,从剔除脚本标记?(how to stop durandal

2019-08-21 23:10发布

我知道有更好的模式,但在这种情况下,有一些我们想移动到一个视图遗留代码。 这个网站有一个

<script src="binding.js"></script>

需要运行的页面呈现和显示器后。

我希望有一个这样做<script src="">标签,但标签似乎变得剥离出来。

我们如何既拿到剧本标签来呈现,或迪朗达尔做一个变通?

HTML示例:

<div>
    <link rel="stylesheet" href="/Content/stylesheet1.css"/>
    <link rel="stylesheet" href="/Content/stylesheet2.css"/>
    <header>
        <h1>heading</h1>
        <h2>sub heading</h2>
    </header>

    <section>
    </section>

    <footer>              
    </footer>
    <script src="dobinding.js"></script>    
</div>

这是有帮助的:

http://knockoutjs.com/documentation/custom-bindings.html

Answer 1:

可以使用自定义的淘汰赛此绑定。

这里是一个非常简单的绑定 - 记住这只是一个想法:

ko.bindingHandlers.script = {
    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
        var scriptName = ko.utils.unwrapObservable(valueAccessor());
        $(element).html("<script src='" + scriptName + "'></script>");
    }
};

在您的视图(.html文件):

<div data-bind="script:'dobinding.js'"></div>

我测试了这一点,我发现剧本确实注入,解析和执行,但它并没有停留在DOM加载。 这可能或可能不会是一个问题。

看来,剥离的标签可能是一个特定的迪朗达尔-事情。 我还没有想出的原因呢,但如果我有机会钻研它,我会更新。



Answer 2:

我相信迪朗达尔视图合成引擎只使用第一个HTML元素在视图中,而忽略其他一切。 所以,如果你的脚本标签视图中的主容器之外,我认为它就会被丢弃。

你可以张贴审查一些HTML / JS?



Answer 3:

如果它没有准备好,你可以换一个函数(让我们称之为doBindings)无论是正在进行的脚本中,然后嵌入脚本的index.html文件(或同等学历),沿着淘汰赛,JQuery的等等。

然后,无论大家认为你需要得到运行的代码,添加viewAttached方法向视图模型,使呼叫doBindings:

activate: function() {
   ...
}
viewAttached: function() {
   doBindings();
}

当视图加载和DOM是访问将调用该函数。

这里的解决方案: 插入脚本标签在迪朗达尔 ,但这里的答案会救了我一些额外的搜索,所以在这里加得。



文章来源: how to stop durandal / jquery stripping out script tags from views?