如何在我的视图中包含在单独的javascript文件中定义的knockout viewmodel?

时间:2016-08-09 18:51:47

标签: javascript knockout.js

我是使用淘汰赛的新手,我创建了一个最初在我视图中的视图模型,当我进入文本框时工作和更新了文本,但是在我将视图中的淘汰视图模型移动到单独的javasctipt文件之后将它包含在脚本标记中引用它的视图中,不应用knockout绑定。我还需要做什么?我如何让它工作?我不想在引用淘汰赛的每个视图中都有脚本标签,并且在视图中定义了视图模型,我希望视图模型位于不同的文件中。

这是我的视图模型,当我将其包含在视图中的脚本标记中时,它可以正常工作。我已将其移至名为UserDashboardViewModel.js的单独文件中,并将其包含在我的视图中,但在单独的文件中仅在包含在视图中时才会起作用:

var viewModel = {
    monkey: ko.observable(),
    array: ko.observableArray(),
    AddAnimal: function () 
    {
        this.array.push(this.monkey());
    }
};

ko.applyBindings(viewModel);

在我看来:

<script type='text/javascript' src='~/Scripts/knockout-3.4.0.js'></script>
    <script type='text/javascript' src='~/Scripts/UserDashboardViewModel.js></script>

<h1 data-bind="text: monkey">text</h1>
... other knockout data-bindings that do not work

1 个答案:

答案 0 :(得分:2)

如果您的脚本标记位于head页面的HTML,那么您需要确保在加载DOM时调用ko.applyBindings()

// with jQuery 
$(document).ready(function(){ko.applyBindings(viewModel); });

// shorter jQuery version 
$(function(){ ko.applyBindings(viewModel); });

// without jQuery (doesn't work in older IEs)
document.addEventListener('DOMContentLoaded', function(){ 
    ko.applyBindings(viewModel);
}, false);