Je suis nouveau dans Knockout. Je ne peux pas comprendre un truc que l'on trouve dans les exemples. Voici mon code. J'ai créé 3 utilisateurs ... Et ci-dessous montrent ma sortie de traitement lorsque je crée un troisième utilisateur.Knockout JS - Valeurs calculées
// It's my view
<div id="page-container">
<input type="text" data-bind="value: usernameInput" />
<button data-bind="click: addPerson">Добавить</button>
<ul data-bind="foreach: users">
<li data-bind="text: username"></li>
</ul>
</div>
<script>
// It's my UserModel
function UserModel(username, callback){
console.log('Start creating object...');
var self = this;
self.username = ko.observable(username);
self.updateCallback = ko.computed(function(){
console.log('updateCallback: ' + self.username());
callback(self);
return true;
});
};
// It's my ViewModel
function ViewModel(){
var self = this;
self.users = ko.observableArray([]);
self.usernameInput = ko.observable('');
self.addPerson = function(){
var u = self.usernameInput();
var um = new UserModel(u, self.update);
self.users.push(um);
console.log('Item Pushed');
self.usernameInput('');
console.log('Users Collection: ' + self.users());
};
self.update = function(item){
console.log('Update: ' + item.username());
ko.utils.arrayFilter(self.users(), function(it) {
});
};
};
ko.applyBindings(new ViewModel(), document.getElementById('page-container'));
Il est ma sortie de la console.
Start creating object...
updateCallback: 3
Update: 3
updateCallback: 1
Update: 1
updateCallback: 2
Update: 2
updateCallback: 3
Update: 3
Item Pushed
Users Collection: [object Object],[object Object],[object Object]
Cette partie je suis comprendre
Start creating object...
updateCallback: 3
Update: 3
Mais quand je tente d'appeler cette fonction dans la méthode de mise à jour dans le contexte updateCallback:
ko.utils.arrayFilter(self.users(), function(it) {
});
ses updateCallback calculée 3 fois, pour chaque utilisateur ...
Quelqu'un peut-il expliquer "sur les doigts" pourquoi est ce qui se passe ... Merci d'avance pour votre réponse ...
f_martinez
Il est parce que votre updateCallback calculé dépend des utilisateurs entiers de observableArray. Cette dépendance peut sembler implicite mais il est créé par rappel (auto) ...
Oui cette dépendance est implicite ... Mais cette dépendance est pas encore clair pour moi ...
Quand je utiliser LOOP mise à jour interne, comme ceci: pour (var i dans self.users()) {} il est calculé updateCallback 3 fois, pour chaque utilisateur ... Mais si je supprime la boucle et créer un troisième utilisateur ... Je vais obtenir seulement cette sortie:
Start creating object...
updateCallback: 3
Update: 3
Item Pushed
Users Collection: [object Object],[object Object],[object Object]
Je ne peux pas comprendre comment updateCallback dépend des utilisateurs entiers observableArray ... J'utilise seulement simple boucle vide et changer quoi que ce soit à l'intérieur DonT ...
Bonjour, f_martinez ... Lisez ci-dessus mon message, s'il vous plaît ... J'ajoute quelques questions ... –
Mis à jour ma réponse. –