Knockout.js 敲除-将多个参数传递给函数

Knockout.js 敲除-将多个参数传递给函数,knockout.js,Knockout.js,有以下viewmodel: Config.User = function (data) { var self = this; self.username = ko.observable(); self.password = ko.observable(); if (data !== undefined) { self.username(data.Username); self.password(data.Password);

有以下viewmodel:

Config.User = function (data) {

    var self = this;

    self.username = ko.observable();
    self.password = ko.observable();

    if (data !== undefined) {
        self.username(data.Username);
        self.password(data.Password);

    }

};

Config.Merchant = function (data) {
    var self = this;

    // Underlying data
    self.id = ko.observable();
    self.name = ko.observable();
    self.users = ko.observableArray();
    if (data !== undefined) {
        self.id(data.Id);
        self.name(data.Name);

        if (data.Users !== undefined) {
            var mappedUsers = $.map(data.Users, function (item) {
                return new Config.User(item);
            });
            self.users(mappedUsers);
        }
    }       
    });
};


Config.MerchantsViewModel = function (options) {
    var self = this;

    // Underlying data
    self.merchants = ko.observableArray();
    $.getJSON(options.loadMerchantsUrl, function (result) {
        if (result !== undefined) {
            //Set available merchants
            var mappedMerchants = $.map(result, function (item) {
                return new Config.Merchant(item);
            });
            self.merchants(mappedMerchants);
        }
    });


    self.deleteUser = function (user, merchant, viewmodel) {

            $.post(options.saveMerchantUrl, merchant, function (result) {
            if (result.success == true) {
                merchant.users.remove(user);
            }
            else {
                //TODO
            }
        });
    };
}
Html是这样的:

<div data-bind="foreach: merchants(), visible: merchants().length > 0">
    <div>
        <label>Merchant Id :</label><input  data-bind="value: id" />
        <label>Merchant Name :</label><input  data-bind="value: name"/>
        <table>   
            <tbody data-bind="foreach: users(), visible: users().length > 0">
                <tr>
                    <td>
                        <a href="#"  data-bind="click: function(){$root.deleteUser($data, $parent.users, $root);}"><i class="icon-remove"></i></a>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
</div>

商户Id:
商户名称:
除了在js中,$root.deleteUser中的$parent.users正确设置了id和name属性,但users属性是一个由0个元素组成的数组外,其他一切似乎都正常工作。
另外,$root.deleteUser中的$root将merchants属性设置为0个元素的数组。我不太明白为什么会发生这种情况/

用户和商户属性的长度为0,因为它是一个可观察数组,您需要检查
users().length
chants().legth
…这是正确的。非常愚蠢的用法,我应该在javascript merchant.users()中使用,因为merchant.users只是可观察的,因此它的长度为0