我知道有更好的模式,但在这种情况下,有一些我们想移动到一个视图遗留代码。 这个网站有一个
<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
你可以使用自定义的淘汰赛此绑定。
这里是一个非常简单的绑定 - 记住这只是一个想法:
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加载。 这可能或可能不会是一个问题。
看来,剥离的标签可能是一个特定的迪朗达尔-事情。 我还没有想出的原因呢,但如果我有机会钻研它,我会更新。
我相信迪朗达尔视图合成引擎只使用第一个HTML元素在视图中,而忽略其他一切。 所以,如果你的脚本标签视图中的主容器之外,我认为它就会被丢弃。
你可以张贴审查一些HTML / JS?
如果它没有准备好,你可以换一个函数(让我们称之为doBindings)无论是正在进行的脚本中,然后嵌入脚本的index.html文件(或同等学历),沿着淘汰赛,JQuery的等等。
然后,无论大家认为你需要得到运行的代码,添加viewAttached方法向视图模型,使呼叫doBindings:
activate: function() {
...
}
viewAttached: function() {
doBindings();
}
当视图加载和DOM是访问将调用该函数。
这里的解决方案: 插入脚本标签在迪朗达尔 ,但这里的答案会救了我一些额外的搜索,所以在这里加得。