最近ViewModelを別のJavaScriptファイルに分けました。ここでノックアウト発射クリックバインドapplyBindings
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を見ると、全体的にうまくいきました。
この回答を得るまでに数分かかりました。私が必要としたのは、関数ポインタを返す代わりに呼び出しを実行する '()'を使って 'Report.preview'を呼び出しているからです。角かっこなしでは期待どおりに動作します。 – Peter