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();
};

2つ目はアドレスビューモデルです。私がやろうとしているのは、状態が -1 の場合、国のドロップダウンリストが有効になり、状態が > 0 の場合、国のドロップダウンリストが無効になり、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);
    }
});    

最初のアドレスだけにしました。2 つ目については、コードを繰り返すのではなく、名前付きのテンプレートを使用する必要があると思います (AddressViewModel には、グローバルな「有効な」属性を含めることができます)。

于 2012-11-02T08:48:24.960 に答える