JavaScript ViewModel の入力フィールドとフィールドの間の双方向バインディングを実現しようとしています。バインディングは宣言的に配線されています。残念ながら、UI で行った変更は ViewModel には反映されません。
私のコードはそのように見えます(ここにコードがないため、頭から書き出されました)
意見:
<form data-win-bind="onsubmit: onCalculate">
<div class="field">
Product Name:
<input type ="number" data-win-bind="text:value1"/>
</div>
<div class="field">
Product Price:
<input type ="number" data-win-bind="text:value2"/>
</div>
<div class="field">
Result
<br />
<span data-win-bind="innerText: result" />
</div>
</form>
JavaScript
var model= WinJS.Class.define(
function() {
this.onCalculate = calculate.bind(this);
this.value1 = 0;
this.value2 = 0;
this.result = 0;
},{
value1: 0,
value2: 0,
result: 0
calculate: function() {
this.result = this.value1 + this.value2;
return false;
}
}, {});
// Make the model Observable
var viewModel = WinJS.Binding.as(new model());
WinJS.Binding.processAll(null, viewModel);
バインディングを適用すると、UI に初期値が表示されます。フォームの送信は、計算機能と正しく関連付けられています。ただし、value1 と value2 の値は、ユーザーの入力によって更新されません。
私が達成しようとしているのは、JavaScript が基になるビューを認識しないようにすることです。そのため、JavaScript で HTML 入力フィールドの変更イベントを接続したくありません。
純粋な WinJS でこれを達成する方法はありますか? これまでに見つけたすべてのサンプルは、一方向バインディングのみを行い、イベント リスナーを使用して、UI からの変更で ViewModel を更新します。