在 durandal viewmodel 的点击绑定函数中获取 viewmodel 上下文
Get viewmodel context in click binding function in durandal viewmodel
我正在尝试通过点击函数访问可观察对象,但无法找到正确的上下文。
define(['plugins/http', 'durandal/app', 'knockout', 'session'], function (http, app, ko, session) {
return {
contacts: ko.observableArray([]),
activate: function () {
var that = this;
headers = {contentType: "application/json", token: session.token}
return http.get('/api/contacts', {}, headers).then(function(response) {
that.contacts(response);
});
},
Delete: function(contact) {
console.log(this.contacts);
//this.contacts.remove(contact);
},
};
});
this.contacts 未定义,$root、$parent 等的任意组合也是如此。如何获得正确的上下文以使用可观察对象? (视图中的删除(联系人)绑定了点击:)
试试这个:
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();
};
});
我们在这里所做的是在函数范围内创建一个自变量,这将允许您在闭包中引用实际对象,而 this 不再引用该对象。
警告没有测试代码所以可能有错误
Luis 的回答没有任何问题,但我的做法不同,看到其他选项也不会对您造成伤害。
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;
});
我更喜欢这种方式,因为它更容易看到正在发生的事情,但它只适用于单例场景。
我正在尝试通过点击函数访问可观察对象,但无法找到正确的上下文。
define(['plugins/http', 'durandal/app', 'knockout', 'session'], function (http, app, ko, session) {
return {
contacts: ko.observableArray([]),
activate: function () {
var that = this;
headers = {contentType: "application/json", token: session.token}
return http.get('/api/contacts', {}, headers).then(function(response) {
that.contacts(response);
});
},
Delete: function(contact) {
console.log(this.contacts);
//this.contacts.remove(contact);
},
};
});
this.contacts 未定义,$root、$parent 等的任意组合也是如此。如何获得正确的上下文以使用可观察对象? (视图中的删除(联系人)绑定了点击:)
试试这个:
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();
};
});
我们在这里所做的是在函数范围内创建一个自变量,这将允许您在闭包中引用实际对象,而 this 不再引用该对象。
警告没有测试代码所以可能有错误
Luis 的回答没有任何问题,但我的做法不同,看到其他选项也不会对您造成伤害。
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;
});
我更喜欢这种方式,因为它更容易看到正在发生的事情,但它只适用于单例场景。