2

我是新来的淘汰赛。我有 2 个 ViewModel

第一个有 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,则禁用 country 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 上上传了我的代码,请帮我修复它。

http://jsfiddle.net/lm2000/2ZEka/22/

4

1 回答 1

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 可能具有全局“启用”属性)。

于 2012-11-02T08:48:24.960 回答