在我的KnockoutJS应用程序中,我循环遍历一个可观察的数组并显示如下内容:
<div id="user-list-container" data-bind="foreach: users">
<div class="row order-line list-row">
<div class="medium-7 small-10 columns">
<i class="fi-torso tip-right"></i>
<a href="javascript:void(0)" data-bind="text: user().name"></a>
<a href="javascript:void(0)" data-bind="text: accountId"></a>
</div>
<div class="medium-3 columns">
<a href="#" class="button split tiny info radius">
<i data-bind="text:role"></i>
<span data-dropdown="leftDrop" data-options="align:left"></span>
</a>
</div>
<div class="medium-2 small-2 columns">
<a href="javascript:void(0)" data-bind="click: $root.deleteRole"><i class="fi-trash" title="@Texts.Remove"></i></a>
</div>
<ul id="leftDrop" class="f-dropdown" data-dropdown-content>
<li><a href="#" data-bind="click: $root.makeForeman">Foreman</a></li>
<li><a href="#" data-bind="click: $root.makeWorker">Worker</a></li>
</ul>
</div>
</div>
一切正常并显示所有元素,但当我单击一个项目对该特定项目进行操作时,每个项目都具有数组中最后一项的值。
在我的Javascript函数中:
self.makeWorker = function (user) {
var project = self.selectedProject();
var account = self.accounts.findByKey(user.accountId);
var ur = user;
console.log(user);
console.log(this);
if (project.role() != "Worker") {
var data = {
role: "Worker",
organizationId: project.organizationId,
projectId: project.id,
accountId: user.accountId
}
TippNett.Project.ChangeRole(data, function (result) {
project.users.findByKey(user.id).role("Worker");
ur.role("Worker");
account.roles.findByKey(user.id).role("Worker");
});
}
}
传递给函数的值始终是'users'可观察数组中的最后一个值。
有关为何发生这种情况的任何意见?有关更多简报,请参见图片: