使用AJAX内部函数绑定可观察数组
问题描述:
我使用Knockout.js。我有这样的功能:使用AJAX内部函数绑定可观察数组
function deviceGroupItem(item) {
this.DeviceGroupName = item.DeviceGroupName;
this.groupDevicesVisible = ko.observable(false)
this.groupDevicesArray = ko.observableArray();
this.deviceGroupClick = function() {
if (this.groupDevicesVisible() == false) {
this.groupDevicesVisible(true)
$.ajax({
url: returnServer() + '/api/Mobile/getRoomDevices?accessToken=' + localStorage.getItem('Token'),
type: "GET",
dataType: "json",
success: function (data) {
this.groupDevicesArray()($.map(data, function (item) {
return new roomDeviceItem(item);
}))
},
error: function() {
}
})
} else {
this.groupDevicesVisible(false)
}
}
return this;
}
问题是,当我'尝试绑定:
this.groupDevicesArray = ko.observableArray();
使用:
this.groupDevicesArray()($.map(data, function (item) {
return new roomDeviceItem(item);
}))
我'接收错误“this.groupDevicesArray是不是功能“。老实说,我不知道如何以正确的方式做到这一点。你知道我该怎么做到这一点?
答
的问题是,因为你this
指观察到阵列的功能deviceGroupClick
内不存在,因为this
是指当前上下文的。
This
技术依赖于当前闭合这是一个伪变量 可以从动态范围有所不同范围。
视图模型:
function roomDeviceItem(data) {
this.room = ko.observable(data.room)
}
function deviceGroupItem() {
var self=this; //Assign this to self & use self everywhere
self.groupDevicesArray = ko.observableArray();
self.deviceGroupClick = function() {
$.ajax({
url: '/echo/json/',
type: "GET",
dataType: "json",
success: function (data) {
data = [{
'room': 'One'
}, {
'room': 'Two'
}]
self.groupDevicesArray($.map(data, function (item) {
return new roomDeviceItem(item);
}))
}
});
};
};
ko.applyBindings(new deviceGroupItem());
工作样本here
只是在-情况下,如果你正在寻找解决方案与this
你需要使用bind(this)
获得外闭止回阀的参考here
+0
我找到了一个解决方案,但这也可以,所以谢谢你的帮助! – Shagohad
试试这个: this.groupDevicesArray(ko.utils.arrayMap(data,function(item){ return new roomDeviceItem(item); });或this.groupDevicesArray($。map(data,function(item){ return new roomDeviceItem(item); })) –
谢谢你的回答,但依然如此。 – Shagohad