データタイプに基づいて編集モードと読み取り専用モードの間で切り替えることができる包括的なノックアウトテンプレートを設定しようとしています。 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>
これは次のように使用されます。
var viewModel = {
name: ko.observable("Brian"),
editable: ko.observable(true)
};
アイデアのようなフィールドレベルでテンプレートを使用できるようにすることです:次のビューモデルで
<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>
明示的な要素/コントロールではなく、 "Name2"の例で使用します。これにより、大部分が重複したマークアップの大部分を持たずに、フォーム全体を編集モードと読み取りモードの間で簡単に切り替えることができます。これはまた、鋳型内部$data
擬似変数バインディング双方向ていない問題
等、例えば、日付フィールドのdatepickersを使用して、共通データタイプ編集/表示マークアップの再利用を可能にします。これはオブザーバブルの現在の値を反映しますが、入力コントロールの変更によって値が設定されることはありません。
$data
ではどのようにして双方向バインディングを取得できますか?
も参照してくださいthis jsfiddle
ありがとうございます!あなたはライアンだ! –
私は '$ data'と' $ item'キーワードを使用しています - テンプレートはレンダリングされませんが、ViewModelフィールド名で 'foreach'で渡された要素にアクセスすると、すべて正常に動作します。 viewModelのユーザ配列(単一の 'name'フィールド)を持つと、' name'へのバインディングはテンプレートで動作しますが、 '$ data'や' $ item'を使っているときは動作できません。例えば、 ''は動作しませんが、 '' ' $ item、$ data'このような問題を引き起こす原因は何ですか?ありがとう – sll
おそらくあなたはjsFiddleであなたの問題を作成することができますか? '$ item'はjQueryテンプレートでのみ利用可能です。 '$ data'がオブジェクトであれば、それをテキストバインディングに渡したくないので、' text:name'や 'text:$ data.name'(2番目の構文は未定義を助けます)をしたいでしょう。 –