Javascript 无法推送到淘汰可观察数组
我试图把一些数据推送到一个可观测的数组中。我从AJAX调用中获取数据,在脚本执行时没有错误。但是,如果我尝试访问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
用户名
,我会得到一个空数组。我错过了什么
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()等待结果,然后您的用户名将有值。