0

私は knockout.js を使用しており、2 つの 2 つのテキスト入力に値が設定されているかどうかを確認したいと考えています。もしそうなら、何かをしてください。

以下は機能しますが、カスタムバインディングまたはその他の方法を使用して「ノックアウト」する方法があるかどうかを知りたいです。将来、より複雑な状況でノックアウトの機能を活用できるように、ノックアウトについてもっと学びたいと思っています。

function DatesViewModel(startDate,endDate){

    var self = this;
    self.startDate = ko.observable("");
    self.endDate = ko.observable("");


    self.startDate.subscribe(function(newValue) {
         check_dates();
    });

    self.endDate.subscribe(function(newValue) {
        check_dates();
    });

    function check_dates(){
        if(self.startDate() !== "" && self.endDate() !== ""){
            alert('values set');
        }
    }

}

計算された関数を使用して DoctorMick が提案することを実行しようとしましたが、その使用法を誤解しているか、機能していません。

self.datesEntered = ko.computed(function() {
    if(self.startDate() !== "" && self.endDate() !== ""){
        return self.startDate() && self.endDate();
    }
});


self.datesEntered.subscribe(function() {
   alert(self.datesEntered);
});

いずれかの日付が変更されるたびにアラートがトリガーされます。また、一連のコードを返すだけです。

4

1 に答える 1

1

実際に何を達成しようとしているかによって異なりますが、上記のスニペットに基づいて計算されたものを使用するので...

self.DatesEntered = ko.computed(function() {
    return self.startDate() && self.endDate();
});

self.datesEntered.subscribe(function(value) {
   if(value) {
       alert("Hurrah, both values entered");
   }
});

こうすることで、DatesEntered にバインドまたはサブスクライブし、両方がキー入力されたら好きなことを行うことができます。ご覧のとおり、元のコードが大幅に簡素化されます。

于 2013-10-07T16:28:13.407 に答える