ノックアウトは、データバインドを使用して入力内の変更をリッスンし、基礎となるモデルを更新します。たとえば、value
バインディングはchange
イベントをリッスンし、新しい値をデータバインドobservable
に書き込みます。
value
属性をコードで更新すると、change
イベントは発生しません。 UIの新しい値を参照してください。ただし、javascriptモデルは更新されません。
明示的に変更をトリガすることでこれと戦うことができます。ここでは例です:
- タイプ
input
に:あなたは、ログは表示されません:ノックアウトではありません、あなたはノックアウトを示しconsole.log
が
- 押して、新しい価値を注入するボタンに更新されます表示されます更新された
- 最後のボタンを押して
change
イベントをトリガーします。ノックアウトがモデルを更新するようになります。
もちろん、2つのクリックリスナーを1つの機能にまとめることができます。私はポイントを渡すためにそれらを分けました。
// Hidden knockout code:
(function() {
var label = ko.observable("test");
label.subscribe(console.log.bind(console));
ko.applyBindings({ label: label });
}());
// Your code
var buttons = document.querySelectorAll("button");
var input = document.querySelector("input");
buttons[0].addEventListener("click", function() {
input.value = "generated value";
});
buttons[1].addEventListener("click", function() {
// http://stackoverflow.com/a/2856602/3297291
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
input.dispatchEvent(evt);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input type="text" data-bind="value: label">
<button>inject value from outside</button>
<button>let knockout know something changed</button>
あなたはドキュメントを読みましたか? http://knockoutjs.com/documentation/attr-binding.html – PMerlet
実際、私はそれをチェックしてデータバインディングのロジックを得ました。そのようなangularJs NGモデルですが、私が理解できなかったことはそれを操作しています。もしあなたがそれについて何か考えているなら、私と共有できるかどうかに感謝します:) –
html domにカスタムスクリプトを追加する方法はありますか? webBrowserコントロールを介して。可能であれば、スクリプトをHTMLにプッシュして、操作できるようにすることもできます。 –