我试图通过点击功能访问一个observable,但无法找出正确的上下文。
await _service.InvokeApiAsync<LoginRequest, HttpResponseMessage>("EasyParkLogin", loginRequest);
this.contacts是未定义的,就像$ root,$ parent等的任意组合一样。如何获得使用observable的正确上下文? (删除(联系人)与视图中的单击:绑定。)
答案 0 :(得分:2)
试试这个:
define(['plugins/http', 'durandal/app', 'knockout', 'session'],
function (http, app, ko, session) {
function myVm(){
var self=this;
self.contacts = ko.observableArray([]);
self.activate = function () {
var that = this;
headers = {contentType: "application/json", token: session.token}
return http.get('/api/contacts', {}, headers).then(function(response) {
that.contacts(response);
});
}
self.Delete = function(contact){
console.log(self.contacts());
}
}
return new myVm();
};
});
我们在这里做的是在函数范围中创建一个自变量,它允许你引用闭包内的实际对象,而这里不再引用该对象。
警告未测试代码,因此可能存在错误
答案 1 :(得分:2)
路易斯的回答没有任何问题,但我的做法不同,看到其他选择也不会让你受伤。
define(['plugins/http', 'durandal/app', 'knockout', 'session'],
function (http, app, ko, session) {
var vm = {
contacts: ko.observableArray([])
};
vm.activate = function () {
headers = { contentType: "application/json", token: session.token }
return http.get('/api/contacts', { }, headers)
.then(function(response) { vm.contacts(response); });
};
vm.Delete = function(contact) {
console.log(vm.contacts());
};
return vm;
});
我喜欢这种方式,因为它更容易看到发生了什么,但它只适用于单身场景。