[解決済み] データバインドビューでIf-Else構造をテンプレート化する方法は?
質問
KOベースのHTMLテンプレートで、このイディオムを常に使っていることに気がつきました。
<!-- ko if: isEdit -->
<td><input type="text" name="email" data-bind="value: email" /></td>
<!-- /ko -->
<!-- ko ifnot: isEdit -->
<td data-bind="text: email"></td>
<!-- /ko -->
KO で条件分岐を行うための、より良い/よりきれいな方法はありますか? アプローチ 伝統的な if-else 構造を使用するよりも良い方法はありますか?
また、Internet Explorer の一部のバージョン (IE 8/9) では、上記の例が正しく解析されないことを指摘しておきたいと思います。以下を参照してください。
このSOの質問
を参照してください。簡単にまとめると、IEをサポートするためにテーブルタグ内のコメント(仮想バインディング)を使用しないことです。使用するのは
tbody
を使うことです。
<tbody data-bind="if: display"><tr><td>hello</td></tr></tbody>
どのように解決するのですか?
このタイプのコードを処理するには、いくつかの異なる方法があります。
-
今のような if/ifnot の組み合わせで。 これは問題なく動作し、ひどく冗長でもありません。
-
Michael Best氏のスイッチ/ケースバインディング( https://github.com/mbest/knockout-switch-case ) は非常に柔軟で、これともっと複雑なもの (真偽よりも多くの状態) を簡単に扱うことができます。
-
もう一つの選択肢は、動的テンプレートを使用することです。 領域を1つまたは複数のテンプレートにバインドし、テンプレート名はobservableに基づき使用されることになります。 しばらく前にこのトピックについて書いた投稿があります。 http://www.knockmeout.net/2011/03/quick-tip-dynamically-changing.html . あなたのシナリオでは、次のように見えるかもしれません。
<td data-bind="template: $root.getCellTemplate"></td>
<script id="cellEditTmpl" type="text/html">
<input type="text" name="email" data-bind="value: email" />
</script>
<script id="cellTmpl" type="text/html">
<span data-bind="text: email"></span>
</script>
は
getCellTemplate
関数はどこにでも設置できますが、最初の引数としてアイテム ($data) を受け取り、使用するテンプレートの名前を返します。
関連
-
[解決済み] mustache.jsでif/elseを実現するにはどうしたらいいですか?
-
[解決済み] Vue.js - ネストされたデータを適切に監視する方法
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] data-id属性を取得するにはどうすればよいですか?
-
[解決済み] PHPからJavaScriptに変数やデータを渡すにはどうしたらよいですか?
-
[解決済み] JavaScript/jQueryでフォームデータを取得するには?
-
[解決済み] How to append text to a `<div>`?
-
[解決済み】KnockoutJSのテンプレートバインディングエラーをデバッグする方法は?
-
[解決済み] Knockout JSのデータバインドをロストフォーカスの代わりにキープレスで行うにはどうしたらいいですか?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] ECMAScriptとは?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?