データ型に基づいて編集モードと読み取り専用モードを切り替えることができる汎用ノックアウトテンプレートをセットアップしようとしています。ASP.NETの動的データを使用したことがある場合:それはフィールドテンプレートのようなものです。例えば:
<script type="text/html" id="text">
<!-- ko if: $root.editable -->
<input type="text" data-bind="value: $data" />
<!-- /ko -->
<!-- ko ifnot: $root.editable -->
<span data-bind="text: $data"></span>
<!-- /ko -->
</script>
これは次のように使用されます。
<label><input type="checkbox" data-bind="checked: editable" /> Editable</label>
<p>Name: <input data-bind="value: name" /></p>
<p>Name2: <span data-bind="template: { name: 'text', data: name }"></span></p>
次のビューモデルを使用します。
var viewModel = {
name: ko.observable("Brian"),
editable: ko.observable(true)
};
アイデアは、明示的な要素/コントロールの代わりに、「Name2」の例のようにフィールドレベルでテンプレートを使用できるようにすることです。これにより、ほとんど重複するマークアップの大きなセクションがなくても、フォーム全体を編集モードと読み取りモードの間で簡単に切り替えることができます。これにより、たとえば日付フィールドに日付ピッカーを使用するなど、一般的なデータ型の編集/表示マークアップを再利用することもできます。
問題
テンプレート内
の$data
疑似変数には双方向バインディングがありません。オブザーバブルの現在の値を反映しますが、入力コントロールの変更は値を設定しません。
どうすれば双方向バインディングを取得でき$data
ますか?
このjsfiddleも参照してください