【问题标题】:Can I dynamically change the 'required' binding in datetimepicker in knockout.js?我可以在 knockout.js 中动态更改 datetimepicker 中的“必需”绑定吗?
【发布时间】:2016-05-18 09:12:07
【问题描述】:

我有一个 datetimepicker,这取决于我的视图模型中的 model.status 属性。我怎样才能收到这个?

<div class='input-group date' data-bind="dateTimePicker: model.dateClaimClosed, dateTimePickerOptions: { required: lookUpViewValue(model.status) == 'Closed' }">
    <input type='text' class="form-control submittable" id="dateClaimClosed" name="dateClaimClosed" placeholder="Select date..." />
    <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
</div> 

这是我的绑定处理程序:

ko.bindingHandlers.dateTimePicker = {
        init: function (element, valueAccessor, allBindingsAccessor) {

            var options = {};

            options.format = "DD/MM/YYYY";

            $(element).datetimepicker(options);

            ko.utils.registerEventHandler(element, "dp.change", function (event) {
                var value = valueAccessor();
                if (ko.isObservable(value)) {

                    if (event.date != null && !(event.date instanceof Date)) {

                        value(event.date != false ? event.date.toDate() : "");
                    } else {

                        value(event.date);
                    }
                }
            });

            ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
                var picker = $(element).data("DateTimePicker");
                if (picker) {
                    picker.destroy();
                }
            });
        },
        update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {

            var options = allBindings().dateTimePickerOptions || {};
            var required = options.required || false;          

            valueAccessor().extend({ required: required });
            ko.bindingHandlers.value.update(element, valueAccessor);

            var picker = $(element).data("DateTimePicker");
            if (picker) {
                var koDate = ko.utils.unwrapObservable(valueAccessor());

                if (koDate === undefined)
                    koDate = null;
                else
                    koDate = (typeof (koDate) !== 'object') ? moment(koDate) : koDate;

                picker.date(koDate);
            }
        }
    };

【问题讨论】:

    标签: javascript knockout.js data-binding


    【解决方案1】:

    找到解决方案:

    if (required)
        valueAccessor().extend({ required: required });
    else 
        valueAccessor().rules.remove(function (item) {
            return item.rule == "required";
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-18
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多