最近、ViewModelを別のJavaScriptファイルに分離しました。
var Report = (function($) {
var initialData = [];
var viewModel = {
reports: ko.observableArray(initialData),
preview: function(path) {
// preview report
},
otherFunctions: function() {}
};
return viewModel;
})(jQuery);
HTMLとノックアウトに関連するコードは次のとおりです
<script type="text/javascript" src="path/to/report/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
ko.applyBindings(Report, document.body);
});
</script>
HTMLユーザーインターフェイスには、ビューモデルのプレビュー機能にデータバインドするためのクリックボタンがあります。
<input type="button" name="Preview" id="Preview" class="btnPreview"
data-bind="click: Report.preview('url/to/report')" />
$(document).ready()関数で次の行が実行されると、問題プレビューメソッドが呼び出されます。
ko.applyBindings(Report, document.body);
つまり、ユーザーが[プレビュー]ボタンをクリックしなくても、プレビュー機能が実行されます。この動作の理由は何でしょうか?HTMLページ自体でモデルJavaScriptを表示すると、すべてが正常に機能していました。