Je suis nouveau à Knockout JS et apprendre comment le composant fonctionne.Knockout Component - Passer la valeur à travers les composants
J'ai créé deux composants pour créer des employés et afficher la liste des employés créés.
Mais je suis face à deux questions:
Numéro 1: événement Click bouton est mise à feu jusqu'à
Numéro 2: Dès que l'employé est créé, je veux refléter tous les employés créés dans un autre composant.
J'ai essayé, comme indiqué ci-dessous dans l'échantillon
Exemple:JSFiddle
Code Source:
/********************* COMPONENT-1 ************************/
ko.components.register('emp-list', {
\t \t viewModel: function(params) {
\t var self = this;
self.Name = ko.observable();
self.Name(params.EmpName.firstName + ', ' + params.EmpName.lastName);
\t \t \t
},
template: '<div class="name-container"><span data-bind="html: Name"></span></div>'
});
/********************* COMPONENT-2 ************************/
ko.components.register('emp-create', {
\t \t viewModel: function(params) {
\t var self = this;
self.firstName = ko.observable(),
self.lastName = ko.observable(),
self.EmpList = ko.observableArray(),
self.AddEmp = function()
{
alert('1');
self.Emplist.push(self.firstName() + ' ' + self.lastName());
for(i=0; i< self.Emplist(); i++)
{
alert(self.Emplist()[i]);
}
}
\t \t \t
},
template: '<div class="create"><input type="text" placeholder="First name" data-bind="text: firstName" /><input type="text" data-bind="text:lastName" placeholder="Last name" /><input type="button" value="Add" data-bind="click: $root.AddEmp" /></div>'
});
/******************** VIEW MODEL ************************/
var vm = function() {
\t \t var self = this;
self.Emps = [{'Details': {firstName: 'First Name-A', lastName: 'Last Name-A'}},
{'Details': {firstName: 'First Name-B', lastName: 'Last Name-B'}}];
}
ko.applyBindings(new vm());
.name-container{
padding: 5px;
margin: 2px;
background-color: #cacaca;
border: 1px solid #888;
border-radius: 5px;
}
.name-container span {
margin: 5px;
}
body {
font-family: arial,sans-serif;
font-size: 13px;
}
.action {
cursor: pointer;
color: blue;
text-decoration: underline;
}
.create {
background-color: #cacaca;
padding: 5px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<div data-bind='component: {name: "emp-create"}'>
</div>
<div data-bind='foreach: Emps'>
<div data-bind='component: {
name: "emp-list",
params: {EmpName: Details}
}'></div>
</div>
Cela fonctionne partiellement. Lorsque je clique sur le bouton Ajouter, il ajoute 'undefined' dans le composant Liste des employés – user2988458
@ user2988458 Ceci est une autre question. Vous pouvez trouver une réponse ici: https://stackoverflow.com/questions/12636695/updating-placeholder-attribute-using-knockout/12673879#12673879. –
Il n'est pas lié à un espace réservé. C'est lié à '# issue2'. Lorsque vous cliquez sur le bouton Ajouter qui fonctionne maintenant bien. Mais le nom de l'employé ne figure pas dans la liste. Au lieu de cela, il montre 'undefined undefined' – user2988458