Knockout.js选择一个选项后,生成另一个具有相同选项的select,所选选项除外

Knockout.js选择一个选项后,生成另一个具有相同选项的select,所选选项除外,knockout.js,Knockout.js,我是一个Knockout.js新手,我正在尝试创建一个“简单”的表单 我用ajax加载html视图,并应用绑定 用户可以从select中选择一些加载项(从服务器抛出到DOM中,它不是作为JSON加载的),在选择一个有效的加载项后,它应该创建另一个具有相同选项的select,除了先前选择的加载项,等等,以确定select中有多少加载项 到目前为止我所拥有的 <table class="new_account new_account_details"> <tr data-b

我是一个Knockout.js新手,我正在尝试创建一个“简单”的表单

我用ajax加载html视图,并应用绑定

用户可以从select中选择一些加载项(从服务器抛出到DOM中,它不是作为JSON加载的),在选择一个有效的加载项后,它应该创建另一个具有相同选项的select,除了先前选择的加载项,等等,以确定select中有多少加载项

到目前为止我所拥有的

<table class="new_account new_account_details">
    <tr data-bind="foreach: new Array(plan_addons_num())">
        <td>
            <select class="plans_plan_addon">
                <option value="">Select</option>
                <option value="1">Addon1</option>
                <option value="2">Addon2</option>
            </select>
        </td>
    </tr>
</table>

var viewModels = {
    planPlans: function () {
        this.plan_addons_num = ko.observable(1);
        this.plan_addon = ko.observable();
        this.plan_addons = ko.observableArray();

//        ko.computed(function () {
//            if (Number(this.plan_addon()) > 0) {
//                this.plan_addons_num(this.plan_addons_num() + 1);
//            }
//        }, this);
    }
};

挑选
附加1
附加2
var视图模型={
平面图:功能(){
此.plan_addons_num=ko.可观察(1);
this.plan_addon=ko.observable();
this.plan_addons=ko.observearray();
//ko.computed(函数(){
//if(编号(此.plan_加载项())>0){
//this.plan\u addons\u num(this.plan\u addons\u num()+1);
//            }
//(本),;
}
};
plan_插件我希望它是当前选定的插件,但如果我将它作为值绑定到foreach中,它就不起作用

我可以将可用的插件设置为HTML中的JSON代码,以便viewmodel在jquery中使用它(如果有帮助的话)。
我怎样才能做到这一点呢?

在使用淘汰赛时,我觉得先考虑一下模型中的东西会有所帮助。计划好模型中的所有内容,稍后再考虑标记,因为标记应该只是模型状态的反映

我不太确定您使用现有绑定的目的是什么,但下面是我将如何创建您的选择控件。在先前选择的选项数组上创建foreach绑定,然后添加一个包含其余选项的附加选择

<table class="new_account new_account_details">
  <tr>
    <!--ko foreach: plan_selectedAddons-->
    <td>
      <select class="plans_plan_addon" data-bind="options: $parent.plan_addons, value: $data" disabled></select>
    </td>
    <!--/ko-->
    <td>
      <select class="plans_plan_addon" data-bind="options: plan_remainingOptions, optionsCaption: 'Select', event: { change: selectAddon }"></select>
    </td>
  </tr>
</table>

下面是一个完整的小提琴来演示javascript:


至于最初填充选项数组,是的,我会将其包含在JSON中,而不是试图从DOM上现有的select中刮取它,但您可以使用jQuery完成这一操作,然后隐藏原始的select。

非常感谢您的回复,敲除非常棒!