检查是否在Knockout.js中设置了输入

时间:2013-10-07 16:22:09

标签: javascript knockout.js

我正在使用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);
});

每次更改任一日期时都会触发警报。而且,它只是返回一堆代码。

1 个答案:

答案 0 :(得分:1)

这取决于你实际想要实现的目标,但我会根据上面的片段使用计算器,所以......

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

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

通过这种方式,您可以绑定或订阅DatesEntered并在键入之后执行任何您喜欢的操作。正如您所看到的,它可以非常简单地简化原始代码。