0

我正在使用 knockout.js,我想检查两个两个文本输入是否设置了值。如果是,那就做点什么。

以下工作,但我想知道是否有使用自定义绑定或其他方式的“淘汰”方式。我只是想了解更多关于淘汰赛的信息,以便能够在未来利用其功能应对更复杂的情况。

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 回答