Knockout JS使用foreach绑定

时间:2015-06-04 13:22:25

标签: javascript knockout.js

在我的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'可观察数组中的最后一个值。

有关为何发生这种情况的任何意见?有关更多简报,请参见图片:

enter image description here

0 个答案:

没有答案