我正在写一份预订申请。 预订程序相当复杂,并且有一些依赖性,因此我决定使用knockout来帮助我观察更改并更新UI。
我开始实施客户列表。表单中的第一个客户将是必须输入其详细信息的客户,其他客户只需要姓名。 我想我可以添加一个dependentObservable来检查当前客户是否是customers数组中的第一个客户,以决定是否显示其他字段。
问题在于,当尝试从客户访问viewModel时,我只得到“未定义”。 我尝试将对viewModel的引用传递给客户,但这也不起作用。 我究竟做错了什么?可以访问viewModel吗?
以下是代码:
var customer = function(){
this.firstName = ko.observable('');
this.lastName = ko.observable('');
this.fullName = ko.dependentObservable(
function(){
return this.firstName() + " " + this.lastName();
},
this
);
this.gender = ko.observable('');
this.diet = ko.observable('');
this.primaryCustomer = ko.dependentObservable(
function(){
console.log(viewModel);
return viewModel.customers.indexOf(this) == 0;
},
this
);
this.email = ko.observable('');
}
var viewModel = {
customers: ko.observableArray([new customer()]),
addCustomer: function(){
this.customers.push(new customer());
},
removeCustomer: function(customer){
this.customers.remove(customer);
}
}
ko.applyBindings(viewModel);
答案 0 :(得分:5)
我明白了。 将viewModel传递给客户的想法是正确的,只是执行不好。当我初始化客户时,我是与一位新客户合作完成的,而这位新客户又寻找那些尚未存在的客户。
这是工作代码:
var customer = function(viewModel){
this.firstName = ko.observable('');
this.lastName = ko.observable('');
this.fullName = ko.dependentObservable(
function(){
return this.firstName() + " " + this.lastName();
},
this
);
this.gender = ko.observable('');
this.diet = ko.observable('');
this.primaryCustomer = ko.dependentObservable(
function(){
console.log(viewModel);
return viewModel.customers.indexOf(this) == 0;
},
this
);
this.email = ko.observable('');
}
var viewModel = {
customers: ko.observableArray(),
removeCustomer: function(customer){
this.customers.remove(customer);
}
}
viewModel.customers.push(new customer(viewModel));
viewModel.addCustomer = function(){
viewModel.customers.push(new customer(viewModel));
}
ko.applyBindings(viewModel);