差分

ナビゲーションに移動 検索に移動

Knockout.js/htmlバインディング

2,809 バイト追加, 2012年4月11日 (水) 08:34
編集の要約なし
#転送 [[Knockout]]の'''htmlバインディング'''とは、パラメーターの値に応じ、関連付けられた[[DOM]]要素内のHTMLを書き換える[[Knockout/可視バインディング|可視バインディング]]のひとつである。 [[Knockout/textバインディング|textバインディング]]とほぼ同じだが、htmlバインディングは文字列がHTMLエスケープされずに直接書き込まれる。つまり一歩間違えば重大な[[セキュリティホール]]となりうる諸刃の剣である。 == パラメーター ==[[Knockout]]は、関連付られたDOM要素内のHTML(innerHTMLプロパティ)を、パラメーターの値で上書きする。 このパラメーターが[[Knockout/observable]]の場合は、値を更新するたびにHTMLも更新する。パラメーターがobservableでない場合はバインディング適用時([[Knockout/applyBindings]]実行時)に1回だけ更新されて以降は更新されない。 パラメーターの値の[[型]]が数値(number型)または文字列(string型)の場合はそのものを、それ以外の場合はtoString()メソッドを実行した結果でテキストを上書きする。 == 使用例 ===== hello world ===「[[hello, world]]」はこんな感じ。内容自体は[[Knockout/textバインディング|textバインディング]]とほぼ同じである。HTMLがエスケープされるか、されないかの違いしかない。 <source lang="html5"><!DOCTYPE html><html lang="ja"><head> <meta charset="UTF-8"> <title>knockout.js - html bindding sample 1</title> <script type="text/javascript" src="jquery-1.5.1.min.js"></script> <script type="text/javascript" src="knockout-2.0.0.js"></script>  <script type="text/javascript"> jQuery(function() { // モデル var AppViewModel = function() { this.message = ko.observable("<b>hello</b>, knockout"); } // バインディング適用 ko.applyBindings(new AppViewModel()); }); </script></head><body> <div data-bind="html: message"></div> </body></html></source> === HTMLエンコーディングについて ===htmlバインディングはDOM要素のinnerHTMLプロパティを使用して書き換えを行うため、使い方を誤れば[[スクリプト・インジェクション]]攻撃をうける[[セキュリティホール]]となりうるので、信頼されていないモデルの値は絶対に使用してはいけない。 コンテンツが安全であることを保証できない場合は、[[Knockout/textバインディング|textバインディング]]を使用すること。 == 関連項目 ==* [[Knockout]]** [[Knockout/可視バインディング|可視バインディング]] == 参考文献 ==<references/>== 外部リンク == {{stub}}
匿名利用者

案内メニュー