【问题标题】:Bind two selectboxes value to a single knockout date property将两个选择框值绑定到单个剔除日期属性
【发布时间】:2012-12-10 19:23:46
【问题描述】:

我有一个淘汰对象,其中包含一个名为 created 的属性。 time Date 的这个属性包含事件的日期。然后在我的 html 表单中,我有两个选择框输入:第一个是小时,第二个是分钟。这些允许用户选择时间,然后应在创建的属性上设置所选值。以下是我的表单的代码示例:

<form action="..." method="...">
    <select name="hours">
        <option value="8">8</option>
        <option value="9">9</option>
        ...
        <option value="22">22</option>
    </select>
    <select name="minutes">
        <option value="0">0</option>
        ...
        <option value="30">30</option>
    </select>

    ...
</form>

这是一个非常简单的表单,但是我不明白如何将输入绑定到创建的值并仅更新属于每个输入的日期部分。基本上,当我选择第一个输入的选项时,我应该更新日期的小时数,当我选择第二个输入的选项时,应该更新日期的分钟数。

【问题讨论】:

    标签: javascript html binding knockout.js


    【解决方案1】:

    我会通过在组合中添加computed observable 来做到这一点,并将选定的分钟和小时存储在它们的组成部分中。

    这是一个稍微做作的例子,但显示了一般原则。这里的计算只是将小时和分钟部分连接在一起,但可能 you 会实例化一个 Date 对象来代替做你需要做的事情:

    function TimeModel(options) {
        var self = this;
    
        self.hourOptions = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
        self.minuteOptions = [0, 15, 30, 45];
    
        self.selectedHour = ko.observable(options.hour || 0);
        self.selectedMinute = ko.observable(options.minute || 0);
    
        self.selectedDate = ko.computed(function() {
            return self.selectedHour() + ":" + self.selectedMinute();
        });
    }
    

    然后我会将hourOptionsminuteOptions 绑定到相应的选择框,一切都应该很好:)

    检查这个小提琴以获得有效的解决方案:http://jsfiddle.net/WickyNilliams/ejjHp/

    【讨论】:

    • 我喜欢你的解决方案,但正如问题中所写,我已经有一个存储日期的属性,我必须在上面设置小时/分钟。我虽然可以以某种方式将 observable 绑定到 Date 对象的 setter 方法。所以我应该将选择框的值设置为时间的值,然后反映对该属性的任何更改
    • 如果你可以写一个 jsfiddle,你就更有可能得到准确的答案,因为人们不必从纯文本中提取需求,它就在那里供他们查看。编辑:另外,我认为你应该扩展我上面概述的方法,单独存储日期的每个部分,并使用计算来计算一个全新的日期,每次它的一部分发生变化(调用setMinutes 没有真正的区别等等,而不是每次都更新Date
    • 这与我的一个应用程序中的代码几乎相同(包括 0、15、30、45)。当 selectedDate 触发时,更新您要发送回服务器的实际日期字段。
    • 但我不确定如何输入日期,除了您概述的时间部分。总是创造一个小提琴,它让一切变得更容易。所以,对如何输入日期做出一些假设,这个怎么样:jsfiddle.net/WickyNilliams/ejjHp/2 正如我所说,这是我原始答案中模式的简单延续
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    相关资源
    最近更新 更多