KnockoutJS tutorials で、説明できない変数$data
を含む次のコード例を見つけました。
ビュー(html):
<!-- Folders -->
<ul class="folders" data-bind="template: { name: 'folderTemplate', foreach: folders }"></ul>
<script type="text/html" id="folderTemplate">
<li data-bind="css: { selected: $data == mailViewModel.selectedFolder() },
click: function() { mailViewModel.selectFolder($data) }">
${$data}
</li>
</script>
ビューモデル(JavaScript):
var viewModel = {
// Data
folders: ['Inbox', 'Archive', 'Sent', 'Spam'],
selectedFolder: ko.observable('Inbox'),
// Behaviours
selectFolder: function (folder) {
this.selectedFolder(folder);
}
};
window.mailViewModel = viewModel;
ko.applyBindings(viewModel);
チュートリアルには、そのドル記号が何のために使用されているのか、この$data
がどこから来たのかの説明は含まれていません。変数$data
はどこにも定義されていません。$data
の3つのインスタンスすべてを$foobar
に名前変更すると、この例は機能しなくなります。
ここではどのような魔法が起こっていますか?
$data
変数は、バインドされている現在のオブジェクトを参照するために使用される組み込み変数です。例では、これはviewModel.folders
配列の要素の1つです。
$ dataは Knockoutのバインドコンテキスト の一部です。
すべての組み込み変数は次のとおりです。
私はそれを機能させました
.selected {
color:red;
}
<ul class="folders" data-bind="template: { name: 'folderTemplate', foreach: folders }"></ul>
<script type="text/html" id="folderTemplate">
<li data-bind="css: { selected: $data == mailViewModel.selectedFolder() },text:$data,
click: function() { mailViewModel.selectFolder($data) }">
</li>
</script>
var viewModel = {
// Data
folders: ['Inbox', 'Archive', 'Sent', 'Spam'],
selectedFolder: ko.observable('Inbox'),
// Behaviours
selectFolder: function (folder) {
this.selectedFolder(folder);
}
};
window.mailViewModel = viewModel;
ko.applyBindings(viewModel);