我是Knockout的新手。我有2个ViewModels
第一个有2个地址,家庭和邮寄。
var EntityViewModel = function (clientId, taxYear) {
var self = this;
self.id = ko.observable(null);
self.name = ko.observable('').extend({
required: { message: ' Name is required' },
validation: { validator: maxLength, message: ' Name must be less than 65 characters', params: 65 }
});
self.homeAddress = new AddressViewModel();
self.mailingAddress = new AddressViewModel();
};
第二个是地址视图模型。我尝试做的是,如果state为-1,则启用country dropdownlist,如果state为> 0,然后国家dropdownList被禁用,countryId被设置为1,这是美国。但问题是我每次改变状态时都会启用或禁用本国和邮寄国家。我该如何解决?
var AddressViewModel = function () {
var self = this;
self.address1 = ko.observable('');
self.address2 = ko.observable('');
self.city = ko.observable('');
self.zipCode = ko.observable('');
self.stateId = ko.observable(null);
self.countryId = ko.observable(null);
self.enableState = ko.observable(false);
self.enableCountry = ko.observable(false);
self.stateId.subscribe(function (newValue) {
if (newValue <= 0) {
self.enableState(true);
self.countryId(null);
} else {
self.enableCountry(false);
self.countryId(1);
}
});
};
顺便说一下,我还有一个不同的邮寄地址复选框,如果取消选中此复选框,则会禁用整个邮寄地址。如果选中该复选框,则可以编辑。
我在jsFiddler上传我的代码,请帮我解决。
答案 0 :(得分:0)
这样好吗? http://jsfiddle.net/zUYGF/1/
基本上我修改了你的订阅功能,如果我理解你想要的东西:
self.stateId = ko.observable(null);
self.countryId = ko.observable(null);
self.enableCountry = ko.observable(true);
self.stateId.subscribe(function (newValue) {
if (newValue <= 0) {
self.countryId(null);
self.enableCountry(true);
} else {
self.countryId(1);
self.enableCountry(false);
}
});
我只为第一个地址做了。对于第二个,您应该使用命名模板而不是重复代码,我认为(您的AddressViewModel可能具有全局“启用”属性)。