【问题标题】:KnockoutJs - shared observable array for more selectsKnockoutJs - 用于更多选择的共享可观察数组
【发布时间】:2015-03-20 07:49:08
【问题描述】:

假设当雇主想要指定雇员和保费金额时,他点击“添加雇员”按钮,然后出现另一个表单,其中包含 select(employees) 并输入金额。

<select>
    <option>John</option>
    <option>George</option>...
</select>

<input type="text" placeholder="Amount"/>

我有一个共享的 ko.observableArray 用于动态添加的选择框和输入。它工作正常...

存在问题,雇主可以多次选择一名雇员(这是不可取的)。我尝试创建新的数组 ko.computed,将选定的员工过滤掉。但总是不成功。

一旦选择的选项应该被禁用或不应该出现在其他选择中。

有人已经解决了吗?

【问题讨论】:

  • 显示更多代码或使用您正在尝试的内容设置 jsfiddle。您的信息很少,看起来好像只是想找人为您工作。

标签: javascript select knockout.js share


【解决方案1】:

好的。我已经解决了:

首先我必须更换我的

<selec data-bind="options: employyes">....

通过 foreach 并手动渲染我的项目

<select data-bind="value: selectedEmployee, foreach: $root.employees, click: $root.updateEmployees, optionsAfterRender: $root.updateEmployees">
    <option value selected="selected" data-bind="visible: $index === 0">Choose...</option>
    <option data-bind="value: id, text: name, attr: {'disabled': disabled}"></option>
</select>

然后我编写了更新员工状态的函数,我总是点击选择... 它正在遍历所有员工并检查是否以某种形式选择了员工 ID,如果是,则禁用属性为真,否则为假。

self.updateEmployees = function() {
        ko.utils.arrayForEach(self.employees(), function (employee) {
            var isEmployeeUsed = false;
            ko.utils.arrayForEach(self.forms(), function (form) {
                console.log(employee.id());
                if (typeof employee !== 'undefined' && typeof form !== 'undefined' && employee.id() === form.selectedEmployee()) {
                    isEmployeeUsed = true;
                }
            });

            employee.disabled(isEmployeeUsed);    
        });

JS Fiddle HERE

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2012-04-20
    • 1970-01-01
    • 2016-07-19
    • 2017-11-25
    • 1970-01-01
    • 2015-09-18
    • 2015-11-30
    • 2018-08-04
    相关资源
    最近更新 更多