差分
ナビゲーションに移動
検索に移動
[[Knockout]]の'''htmlバインディング'''とは、パラメーターの値に応じて関連付けられた[[DOM]]要素内のHTMLを書き換えるバインディングのことである。
[[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]]
== 参考文献 ==
<references/>
== 外部リンク ==
{{stub}}
[[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]]
== 参考文献 ==
<references/>
== 外部リンク ==
{{stub}}