Javascript 无法推送到淘汰可观察数组

Javascript 无法推送到淘汰可观察数组,javascript,arrays,knockout.js,javascript-objects,Javascript,Arrays,Knockout.js,Javascript Objects,我试图把一些数据推送到一个可观测的数组中。我从AJAX调用中获取数据,在脚本执行时没有错误。但是,如果我尝试访问用户名,我会得到一个空数组。我错过了什么 UserHandler = (function () { var userName = function (data) { this.Name = data; }; var userNames = ko.observableArray([]); var getUserNames

我试图把一些数据推送到一个可观测的数组中。我从AJAX调用中获取数据,在脚本执行时没有错误。但是,如果我尝试访问
用户名
,我会得到一个空数组。我错过了什么

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());
   --> []

敲除中的可观察数组很棘手,有时很难理解。我可以这样做:

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

userNames($.map(data, function (entry) {
    return new userName(entry);
}));
在第一个解决方案中,添加括号以获得可观察的原始值,然后对其进行操作并通知所有订阅者该值已更改。
在第二个解决方案中,您只需提供ObservalArray的新值。

如果您只执行代码的这一部分-$.map(数据,函数(条目){返回新用户名(条目),会发生什么;我最终得到了一个
userName
对象数组。我可以循环遍历这些对象并返回对象的属性。我是否可能在作用域上出错?由于某种原因,它仍然不起作用。如果我添加
console.log(userNames())
对于AJAX成功函数,我获取所有用户。这两种方法都适用。但是如果我尝试对象外部的
console.log(UserHandler().UserNames())
,我会得到null。每次调用UserHandler()时,都会收到新对象。因此,请将其分配给某个变量,调用GetUserNames()等待结果,然后您的用户名将有值。