「Knockout.js/htmlバインディング」の版間の差分

imported>Administrator
ページの作成:「Knockoutの'''htmlバインディング'''とは、パラメーターの値に応じて関連付けられたDOM要素内のHTMLを書き換えるバインディ...」
 
imported>Administrator
 
(同じ利用者による、間の6版が非表示)
1行目: 1行目:
[[Knockout]]の'''htmlバインディング'''とは、パラメーターの値に応じて関連付けられた[[DOM]]要素内のHTMLを書き換えるバインディングのことである。
[[Knockout.js]]の'''htmlバインディング'''とは、パラメーターの値に応じ、関連付けられた[[DOM]]要素内の[[HTML]]を書き換える[[Knockout.js/可視バインディング|可視バインディング]]のひとつである。


[[Knockout/textバインディング|textバインディング]]とほぼ同じだが、htmlバインディングは文字列がHTMLエスケープされずに直接書き込まれる。
[[Knockout.js/textバインディング|textバインディング]]とほぼ同じだが、htmlバインディングは文字列がHTMLエスケープされずに直接書き込まれる。つまり一歩間違えば重大な[[セキュリティホール]]となりうる諸刃の剣である。


== パラメーター ==
== パラメーター ==
[[Knockout]]は、関連付られたDOM要素内のHTML(innerHTMLプロパティ)を、パラメーターの値で上書きする。
[[Knockout.js]]は、関連付られたDOM要素内のHTML(innerHTMLプロパティ)を、パラメーターの値で上書きする。


このパラメーターが[[Knockout/observable]]の場合は、値を更新するたびにHTMLも更新する。パラメーターがobservableでない場合はバインディング適用時([[Knockout/applyBindings]]実行時)に1回だけ更新されて以降は更新されない。
このパラメーターが[[Knockout.js/observableオブジェクト|observableオブジェクト]]の場合は、値を更新するたびにHTMLも更新する。パラメーターが[[Knockout.js/observableオブジェクト|observableオブジェクト]]でない場合はバインディング適用時([[Knockout.js/applyBindings関数|applyBindings関数]]実行時)に1回だけ更新されて以降は更新されない。


パラメーターの値の[[型]]が数値(number型)または文字列(string型)の場合はそのものを、それ以外の場合はtoString()メソッドを実行した結果でテキストを上書きする。
パラメーターの値の[[型]]が数値(number型)または文字列(string型)の場合はそのものを、それ以外の場合はtoString()メソッドを実行した結果でテキストを上書きする。
12行目: 12行目:
== 使用例 ==
== 使用例 ==
=== hello world ===
=== hello world ===
[[hello, world]]」はこんな感じ。
htmlバインディングを使用した「[[hello, world]]」はこんな感じ。
内容自体は[[Knockout/textバインディング|textバインディング]]とほぼ同じである。HTMLがエスケープされるか、されないかの違いしかない。
内容自体は[[Knockout.js/textバインディング|textバインディング]]とほぼ同じである。HTMLがエスケープされるか、されないかの違いしかない。


<source lang="html5">
<source lang="html5">
26行目: 26行目:
   <script type="text/javascript">
   <script type="text/javascript">
     jQuery(function() {
     jQuery(function() {
       // モデル
       // ビューモデル
       var AppViewModel = function() {
       var AppViewModel = function() {
         this.message = ko.observable("<b>hello</b>, knockout");
         this.message = ko.observable("<b>hello</b>, knockout");
46行目: 46行目:
htmlバインディングはDOM要素のinnerHTMLプロパティを使用して書き換えを行うため、使い方を誤れば[[スクリプト・インジェクション]]攻撃をうける[[セキュリティホール]]となりうるので、信頼されていないモデルの値は絶対に使用してはいけない。
htmlバインディングはDOM要素のinnerHTMLプロパティを使用して書き換えを行うため、使い方を誤れば[[スクリプト・インジェクション]]攻撃をうける[[セキュリティホール]]となりうるので、信頼されていないモデルの値は絶対に使用してはいけない。


コンテンツが安全であることを保証できない場合は、[[Knockout/textバインディング|textバインディング]]を使用すること。
コンテンツが安全であることを保証できない場合は、[[Knockout.js/textバインディング|textバインディング]]を使用すること。


== 関連項目 ==
== 関連項目 ==
* [[Knockout]]
* [[Knockout.js]]
** [[Knockout.js/可視バインディング|可視バインディング]]
 
== 参考文献 ==
== 参考文献 ==
<references/>
<references/>