Dans les tutoriels KnockoutJS je suis tombé sur l'exemple de code suivant qui contient une variable inexplicable $data
.
La vue (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>
Le modèle de vue (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);
Le didacticiel ne contient aucune explication à quoi ce signe dollar est utilisé et où ce $data
vient de. La variable $data
n'est nulle part défini et lorsque je renomme les trois instances de $data
à $foobar
, l'exemple ne fonctionne plus.
Quel genre de magie se passe ici?
Le $data
variable est une variable intégrée utilisée pour faire référence à l'objet courant lié. Dans l'exemple, c'est l'un des éléments du viewModel.folders
tableau.
$ data fait partie de Knockout's Binding Contexts .
Voici toutes les variables intégrées:
je l'ai fait fonctionner
.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);
veuillez consulter http://jsfiddle.net/bowen31337/48RDd/