「Knockout.js/textバインディング」の版間の差分
imported>Administrator |
imported>Administrator |
||
(同じ利用者による、間の6版が非表示) | |||
1行目: | 1行目: | ||
− | [[Knockout]]の'''textバインディング''' | + | [[Knockout.js]]の'''textバインディング'''とは、パラメーターの値に応じ、関連付けられた[[DOM]]要素内のテキストを書き換える[[Knockout.js/可視バインディング|可視バインディング]]のひとつである。 |
− | + | textバインディングは、通常spanタグやemタグといった要素の内容を書き換えるのに使うものだが、技術的には任意のあらゆる要素で使用できる。 | |
textバインディングで書き換えられた文字列はすべては強制的にプレーンテキストとなる。 | textバインディングで書き換えられた文字列はすべては強制的にプレーンテキストとなる。 | ||
− | プレーンテキストではなくHTMLで書き換えたい場合には[[Knockout/htmlバインディング|htmlバインディング]]を使用する。 | + | プレーンテキストではなくHTMLで書き換えたい場合には[[Knockout.js/htmlバインディング|htmlバインディング]]を使用する。 |
− | ただし[[Knockout/htmlバインディング|htmlバインディング]]は使い方を一歩間違うと[[スクリプトインジェクション]]攻撃を受ける危険性が高いので素人にはおすすめできない。 | + | ただし[[Knockout.js/htmlバインディング|htmlバインディング]]は使い方を一歩間違うと[[スクリプトインジェクション]]攻撃を受ける危険性が高いので素人にはおすすめできない。 |
== パラメーター == | == パラメーター == | ||
− | [[Knockout]]は、関連付られたDOM要素内のテキスト([[IE]] | + | [[Knockout.js]]は、関連付られたDOM要素内のテキスト([[IE]]であればinnerTextプロパティ、[[Firefox]]であればtextCotnentプロパティの値)を、パラメーターの値で上書きする。 |
− | このパラメーターが[[Knockout/ | + | このパラメーターが[[Knockout.js/observableオブジェクト|observableオブジェクト]]の場合は、値を更新するたびにテキストも更新する。パラメーターが[[Knockout.js/observableオブジェクト|observableオブジェクト]]でない場合はバインディング適用時([[Knockout/applyBindings関数|applyBindings関数]]実行時)に1回だけ更新されて以降は更新されない。 |
パラメーターの値の[[型]]が数値(number型)または文字列(string型)の場合はそのものを、それ以外の場合はtoString()メソッドを実行した結果でテキストを上書きする。 | パラメーターの値の[[型]]が数値(number型)または文字列(string型)の場合はそのものを、それ以外の場合はtoString()メソッドを実行した結果でテキストを上書きする。 | ||
16行目: | 16行目: | ||
== 使用例 == | == 使用例 == | ||
=== hello world === | === hello world === | ||
− | + | textバインディングを使用した「[[hello, world]]」はこんな感じ。 | |
<source lang="html5"> | <source lang="html5"> | ||
<!DOCTYPE html> | <!DOCTYPE html> | ||
28行目: | 28行目: | ||
<script type="text/javascript"> | <script type="text/javascript"> | ||
jQuery(function() { | jQuery(function() { | ||
− | // | + | // ビューモデル |
var AppViewModel = function() { | var AppViewModel = function() { | ||
this.message = ko.observable("hello, world"); | this.message = ko.observable("hello, world"); | ||
45行目: | 45行目: | ||
=== HTMLの使用 === | === HTMLの使用 === | ||
− | textバインディングのパラメーターに[[HTML]]を書いてもそのままの文字列として表示される(HTMLエスケープされた文字列が表示される)。HTMLで上書きしたい場合は[[Knockout/htmlバインディング|htmlバインディング]]を使用する。 | + | textバインディングのパラメーターに[[HTML]]を書いてもそのままの文字列として表示される(HTMLエスケープされた文字列が表示される)。HTMLで上書きしたい場合は[[Knockout.js/htmlバインディング|htmlバインディング]]を使用する。 |
=== 式の使用 === | === 式の使用 === | ||
textバインディングには簡単な式が使える。 | textバインディングには簡単な式が使える。 | ||
− | 式に関する詳細は[[Knockout]]の項目を参照。 | + | 式に関する詳細は[[Knockout.js]]の項目を参照。 |
[[3項演算子]]の使用例。 | [[3項演算子]]の使用例。 | ||
80行目: | 80行目: | ||
== 関連項目 == | == 関連項目 == | ||
− | * [[Knockout]] | + | * [[Knockout.js]] |
+ | ** [[Knockout.js/可視バインディング|可視バインディング]] | ||
+ | ** [[Knockout.js/制御フローバインディング|制御フローバインディング]] | ||
+ | |||
== 参考文献 == | == 参考文献 == | ||
<references/> | <references/> |
2012年4月20日 (金) 08:10時点における最新版
Knockout.jsのtextバインディングとは、パラメーターの値に応じ、関連付けられたDOM要素内のテキストを書き換える可視バインディングのひとつである。
textバインディングは、通常spanタグやemタグといった要素の内容を書き換えるのに使うものだが、技術的には任意のあらゆる要素で使用できる。
textバインディングで書き換えられた文字列はすべては強制的にプレーンテキストとなる。 プレーンテキストではなくHTMLで書き換えたい場合にはhtmlバインディングを使用する。 ただしhtmlバインディングは使い方を一歩間違うとスクリプトインジェクション攻撃を受ける危険性が高いので素人にはおすすめできない。
パラメーター[編集 | ソースを編集]
Knockout.jsは、関連付られたDOM要素内のテキスト(IEであればinnerTextプロパティ、FirefoxであればtextCotnentプロパティの値)を、パラメーターの値で上書きする。
このパラメーターがobservableオブジェクトの場合は、値を更新するたびにテキストも更新する。パラメーターがobservableオブジェクトでない場合はバインディング適用時(applyBindings関数実行時)に1回だけ更新されて以降は更新されない。
パラメーターの値の型が数値(number型)または文字列(string型)の場合はそのものを、それ以外の場合はtoString()メソッドを実行した結果でテキストを上書きする。
使用例[編集 | ソースを編集]
hello world[編集 | ソースを編集]
textバインディングを使用した「hello, world」はこんな感じ。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>knockout.js - text 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("hello, world");
}
// バインディング適用
ko.applyBindings(new AppViewModel());
});
</script>
</head>
<body>
<div data-bind="text: message"></div>
</body>
</html>
HTMLの使用[編集 | ソースを編集]
textバインディングのパラメーターにHTMLを書いてもそのままの文字列として表示される(HTMLエスケープされた文字列が表示される)。HTMLで上書きしたい場合はhtmlバインディングを使用する。
式の使用[編集 | ソースを編集]
textバインディングには簡単な式が使える。 式に関する詳細はKnockout.jsの項目を参照。
3項演算子の使用例。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>knockout.js - text 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.price = ko.observable("19800");
}
// バインディング適用
ko.applyBindings(new AppViewModel());
});
</script>
</head>
<body>
<p><span data-bind="text: price"></span>円の商品について</p>
<p>Aさんは <span data-bind="text: price() > 20000 ? '高い' : '安い'"></span> と言いました。</p>
<p>Bさんは <span data-bind="text: price() > 10000 ? '高い' : '安い'"></span> と言いました。</p>
</body>
</html>