Knockout.js 将标题添加到列表中

Knockout.js 将标题添加到列表中,knockout.js,Knockout.js,我有一个带有费用列表的选择字段,每个费用都有一个id、说明和状态-新的或旧的 <select id="feesSelect" data-bind="options: $root.fees(), optionsText: 'description', optionsValue: 'feesID', value: feeID(), optionsCaption: 'Choose Fee'"></select> 你需要做的事情: 将平面列表拆分为嵌套列表:组->费用 在组上循

我有一个带有费用列表的选择字段,每个费用都有一个id、说明和状态-新的或旧的

<select id="feesSelect" data-bind="options: $root.fees(), optionsText: 'description', optionsValue: 'feesID', value: feeID(), optionsCaption: 'Choose Fee'"></select>
你需要做的事情:

  • 将平面列表拆分为嵌套列表:
    组->费用
  • 在组上循环以生成
    元素
  • 循环计算费用以生成
    元素
  • 对于步骤2和步骤3,可以定义快速自定义绑定,如中所述

    对于步骤1,您需要循环查看您的费用列表并将其添加到组中。例如:

    const feeGroups = [
      { label: "new", fees: fees.filter(f => f.type === "old") },
      { label: "old", fees: fees.filter(f => f.type === "new") }
    ];
    
    您可以在下面的代码段中查看一个工作示例

    //来自:https://stackoverflow.com/a/11190148/3297291
    ko.bindingHandlers.option={
    更新:函数(元素、值访问器){
    var value=ko.utils.unwrapobbservable(valueAccessor());
    ko.selectExtensions.writeValue(元素,值);
    }
    };
    施工费用=[
    {type:“old”,description:“test1”},
    {type:“old”,description:“test2”},
    {type:“new”,description:“test3”},
    {type:“new”,description:“test4”}
    ];
    常数组=[
    {label:“new”,fees:fees.filter(f=>f.type==“new”)},
    {label:“old”,fees:fees.filter(f=>f.type==“old”)}
    ];
    applyBindings({feeGroups,selectedFee:ko.observable()});
    
    
    
    非常感谢您的回答,在第一步中,我只获得了第一组费用(新的),您知道这是什么原因吗?我需要看一个数据示例和您用于分组费用的过滤器。你能创建一个片段来展示你所做的尝试吗?我成功了,我得到了过滤列表,但是标题是空的,你知道吗?你是否将正确的属性名称传递给标签和文本绑定?我想是的,你能给我解释一下
    selectedFee
    属性吗?它是干什么的?不清楚。是否要根据
    状态将
    标题
    属性添加到每个
    选项
    ?这些要点确实令人困惑。例如:“test1——这是一个费用描述”这是什么意思?@adiga是的,这正是我想要的-根据
    状态为每个
    选项添加
    标题
    属性。我会尽量编辑我的问题,让它更清楚一点。
    
    const feeGroups = [
      { label: "new", fees: fees.filter(f => f.type === "old") },
      { label: "old", fees: fees.filter(f => f.type === "new") }
    ];