【问题标题】:Selection box model with typescript and knockout (foreach)带有打字稿和敲除(foreach)的选择框模型
【发布时间】:2019-04-09 00:35:36
【问题描述】:

我正在使用 Knockout 和 Typescript。我有一个具有多个输入和一个选择标签的表单。对于输入数据,只需通过名称即可轻松绑定数据。但是对于选择标签(下拉列表),它并不那么明显。 我尝试为 foreach 中的多个对象的下拉列表设置默认选项。

我是这样的:Selection box model with typescript and knockout

我的典型打字稿:

export class ViewModel {
choices = ko.observable([
    { id: 1, hour: "01:00", choice: false },
    { id: 2, hour: "02:00", choice: false },
    { id: 3, hour: "03:00", choice: false },
    { id: 4, hour: "04:00", choice: false },
    { id: 5, hour: "05:00", choice: false },
    { id: 6, hour: "06:00", choice: false },
    { id: 7, hour: "07:00", choice: false },
    { id: 8, hour: "08:00", choice: false },
    { id: 9, hour: "09:00", choice: false },
    { id: 10, hour: "10:00", choice: false },
]);
selectedChoice = ko.observable(10);
selectedHours = ko.observable([1, 5, 7]);

constructor() {
    this.config = new ServiceConfigurationModel();
    this.getConfiguration();
    this.selectedChoice.subscribe(function (newValue) {
        alert("the new value is " + newValue);
    });
}
}

当我在 HTML 中有这一行时:

<select data-bind="options: choices, optionsText: 'hour', optionsValue: 'id',  value: selectedChoice"></select>

但是,当我想使用 &lt;!-- ko foreach: selectedHours() --&gt; 为每个 selectedHours 数组重复它时,它不起作用

您是否有任何提示如何为多个下拉列表设置此选项而不重复整个代码?

提前感谢您的任何帮助

【问题讨论】:

    标签: typescript knockout.js


    【解决方案1】:

    我认为您正在寻找 selectedOptions 绑定?

    顺便说一句,你的choices observable 应该是一个 observableArray。还有selectedHours

    function viewmodel(){
      this.choices = ko.observableArray([
        { id: 1, hour: "01:00", choice: false },
        { id: 2, hour: "02:00", choice: false },
        { id: 3, hour: "03:00", choice: false },
        { id: 4, hour: "04:00", choice: false },
        { id: 5, hour: "05:00", choice: false },
        { id: 6, hour: "06:00", choice: false },
        { id: 7, hour: "07:00", choice: false },
        { id: 8, hour: "08:00", choice: false },
        { id: 9, hour: "09:00", choice: false },
        { id: 10, hour: "10:00", choice: false },
      ]);
      //selectedChoice = ko.observable(10);
      this.selectedHours = ko.observableArray([1, 5, 7]);
      this.selectedHours.subscribe(function (newValue) {
            //alert("the new value is " + newValue);
            console.log("the new value is " + newValue);
      });
      this.clear = function(){
          console.clear();
      };
    };
    
    ko.applyBindings(viewmodel());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    <select data-bind="options: choices, 
                       optionsText: 'hour', 
                       optionsValue: 'id',  
                       selectedOptions: selectedHours" 
            multiple="true" 
            style="height: 150px"></select>
     <button data-bind="click: clear" style="float: right">Clear</button>

    【讨论】:

    • 雷,非常感谢您的评论!这是一个很好的例子?,但我正在寻找多个下拉列表,而不是在一个列表中选择多个值。问题是我基于一些 .json 数据创建表单,我需要绑定正确的数据。每个表单都将具有相同的架构——它将包含多个输入、复选框,还有一个下拉列表(选择)和 2 个单选按钮。我不想用 HTML 编写多个表单。我尝试使用 Knockout foreach 遍历整个 .json 并以表单显示数据,这正是我遇到多个下拉列表问题的地方
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2015-11-28
    • 2019-04-26
    相关资源
    最近更新 更多