在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
的所有三个实例重命名为$foobar
时,该示例不再起作用。
这到底是怎么回事?
发布于 2011-10-21 00:40:06
$data
变量是一个内置变量,用于引用正在绑定的当前对象。在本例中,这是viewModel.folders
数组中的一个元素。
发布于 2013-05-01 20:53:38
我让它工作了
.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);
https://stackoverflow.com/questions/7838853
复制相似问题