【问题标题】:two datepickers with knockout, one updates another两个带淘汰赛的日期选择器,一个更新另一个
【发布时间】:2012-11-09 21:38:13
【问题描述】:

我附加了带有敲除自定义绑定处理程序的 jQuery datepicker,并且我想在更新第一个字段时将 minDate 设置为第二天之后(以防其他日期未设置为以后的日期)。

<label>Check-in:</label>
<input type="date" id="checkIn" data-bind="datepicker: checkIn, datepickerOptions: {
    minDate: 0,
    dateFormat: 'dd/mm/yy',
    firstDay: 1
    }" />
<br/>
<br/>

<label>Check-out:</label>
<input type="date" id="checkOut" data-bind="datepicker: checkOut, datepickerOptions: {
    minDate: 0,
    dateFormat: 'dd/mm/yy',
    firstDay: 1
    }" />

我已经设置fiddle for that

例如 如果 checkOut 日期选择 28/11/2012 而您 checkIn 选择 25/11/2012 则无需更改 checkOut 日期,只需将 checkOut 的 minDate 设置为 26/11/2012。

但如果您选择 29/11/2012 进行 checkIn,则 checkOut 需要更新为 30/11/2012

【问题讨论】:

    标签: knockout.js jquery-ui-datepicker


    【解决方案1】:

    一种方法是订阅第一个日期可观察属性并使用它来设置第二个:

    self.checkIn.subscribe(function(newValue) {
        $("#checkOut").datepicker("option", "minDate", self.checkIn());
    });
    

    here

    当然,这不是最优雅的解决方案,因为它需要知道视图的哪一部分与其他属性相关。更好的解决方案可能是创建另一个自定义绑定。

    类似这样的:

    ko.bindingHandlers.minDate = {
        update: function(element, valueAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor()),
            current = $(element).datepicker("option", "minDate", value);
        }        
    }
    

    这样绑定:

    <input type="date" id="checkOut" data-bind="{datepicker: checkOut, datepickerOptions: {
    minDate: 0,
    dateFormat: 'dd/mm/yy',
    firstDay: 1
    },
    minDate: checkIn}" />
    

    here

    【讨论】:

    • 绑定处理程序工作得很好!...直到您尝试将日期加载到可观察对象中,即在页面加载时设置值。我猜需要在绑定处理程序中添加一个“init”函数吗?
    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 2016-05-24
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多