繁体   English   中英

如何使用敲除.js根据现有数组中选择元素的选择值设置输入字段的可见性

[英]how to set the visibility of a input field based upon the selected value of a select element within an existing array using knockout.js

我正在创建一个动态过滤器列表,该列表允许用户添加多个条件。 该列表由一个选择元素和两个输入字段组成。 最初只应显示一个字段。 仅当选择值BETWEEN时,才显示第二个字段。 我看到了使用on select元素设置元素可见性的示例。 这是我到目前为止的内容:

JS

function FilterList(Operator, FilterCriteria, FilterCriteriaRange) {
    var self = this;
    self.operator = ko.observable(Operator);
    self.criteria1 = ko.observable(FilterCriteria);
    self.criteria2 = ko.observable(FilterCriteriaRange);
}

function AppViewModel() {
    var self = this;

    self.filterOperators = ko.observableArray([{
        operatorName: "EQUALS",  operatorValue: "=" }, {
        operatorName: "GREATER THAN", operatorValue: ">"}, {
        operatorName: "GREATER THAN OR EQUAL TO", operatorValue: ">="}, {
        operatorName: "LESS THAN", operatorValue: "<" }, {
        operatorName: "LESS THAN OR EQUAL TO", operatorValue: "<=" }, {
        operatorName: "NOT EQUAL TO", operatorValue: "<>" }, {
        operatorName: "NOT LESS THAN", operatorValue: "!>" }, {
        operatorName: "NOT GREATER THAN", operatorValue: "!<" }, {
        operatorName: "BETWEEN", operatorValue: "BETWEEN" }, {
        operatorName: "LIKE",  operatorValue: "LIKE"
    }]);
    //define filter collection
    self.myfilters = ko.observableArray([]);
    self.addFilter = function () {
        self.myfilters.push(new FilterList(self.filterOperators[0]));
    };

    self.inputVisible = ko.computed(function(){
        //retrieve the selected value of the current row and display the second criteria field if the selected value is BETWEEN
        //return self.operator();
    });
}
ko.applyBindings(new AppViewModel());

HTML

<input type="button" value="Add Filter" title="Add Group" data-bind="click: $root.addFilter" />
<table>
   <tbody data-bind="foreach: myfilters">
     <tr>
     <td>
       <select data-bind="options: $root.filterOperators, value:operator, optionsText:'operatorName'"></select>
     </td>
     <td>
       <input data-bind="value: criteria1" />
      </td>
     <td>
      <input data-bind="value: criteria2, visible: inputVisible() === 'BETWEEN'" />
     </td>
    </tr>
    </tbody>
</table>

卡住的地方是要获取与之交互的当前行的正确值。 此链接http://jsfiddle.net/rlcrews/R6Kcu/提供了一个工作小提琴,用于显示正在生成的行。

这是您要找的东西吗? http://jsfiddle.net/pyvJW/1/

由于要遍历myfilters,因此可以访问operator字段。 由于运算符是可观察的,因此只需要括号即可访问operatorName。

<input data-bind="value: criteria2, visible: operator().operatorName === 'BETWEEN'" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM