未能推送到Knockout可观察数组

时间:2014-03-10 16:51:45

标签: javascript arrays knockout.js javascript-objects

我正在尝试将一些数据推送到KO可观察数组。我从我的AJAX调用中获取数据,并且在脚本执行时没有出现任何错误。但是,如果我尝试访问userNames,我会得到一个空数组。我在这里缺少什么?

UserHandler = (function () {
    var userName = function (data) {
            this.Name = data;
        };

    var userNames = ko.observableArray([]);

    var getUserNames = function () {
            userNames([]);
            $.ajax({
                url: "Users/All",
                dataType: "json",
                success: function (data) {
                    ko.utils.arrayPushAll(userNames, $.map(data, function (entry) {
                        return new userName(entry);
                    }));
                }
            });
        };;

    return {
        UserNames: userNames,
        GetUserNames: getUserNames,
    };

});

console.log(UserHandler().UserNames());
   --> []

1 个答案:

答案 0 :(得分:0)

淘汰赛中的可观察阵列很棘手,有时难以理解。我可以这样做:

ko.utils.arrayPushAll(userNames(), $.map(data, function (entry) {
    return new userName(entry);
}));
userNames.valueHasMutated();

或只是

userNames($.map(data, function (entry) {
    return new userName(entry);
}));

在第一个解决方案中,您添加括号以获取可观察的原始值,然后您操纵它并通知所有订阅者值已更改。 在第二个解决方案中,您只需提供observableArray的新值。