首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >剔除DatePicker绑定项不会禁用DatePicker

剔除DatePicker绑定项不会禁用DatePicker
EN

Stack Overflow用户
提问于 2014-02-25 01:54:40
回答 2查看 1.6K关注 0票数 3

我为日期选择器绑定了一个定制的knockoutJs。

代码语言:javascript
复制
ko.bindingHandlers.valueAsDatePicker = {...}

当绑定输入字段状态(已启用/禁用)绑定到可观察到的KO时,它不会启用/禁用datepicker图标。

代码语言:javascript
复制
<input id="txtRequestedTo" type="text" placeholder="dd/mm/yyyy" 
data-bind="valueAsDatePicker: reqDateTo, disable: reqDateFrom().length < 1" />

自定义绑定

代码语言:javascript
复制
ko.bindingHandlers.valueAsDatePicker = {
    init: function(element, valueAccessor, allBindingsAccessor) {
        ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor);
        formatAndSetDateValue(element, valueAccessor, allBindingsAccessor);

        // Init UI datepicker
        var dateFormat = allBindingsAccessor.dateFormat 

        $(element).datepicker({
            dateFormat: dateFormat,
            changeMonth: true, 
            changeYear: true, 
            yearRange: '1900:' + new Date().getFullYear(), 
            maxDate: 0, 
            showOn: "button",
            buttonImage: "Content/images/sprite-base/sprite/icon-calender.png",
            buttonImageOnly: true,
            constrainInput: false, 
            buttonText: ""          
        });
    },
    update: function(element, valueAccessor, allBindingsAccessor) {
        // Use the value binding
        ko.bindingHandlers.value.update(element, valueAccessor, allBindingsAccessor);
        formatAndSetDateValue(element, valueAccessor, allBindingsAccessor);

        valueAccessor().valueHasMutated(); 
    }
};

如果元素被禁用,我希望数据报警器被禁用,而副Versa。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-11 02:47:02

感谢一百万罗伯特,

这里是有效的解决方案.

使用KnockOutJS V3.1

代码语言:javascript
复制
init: function (element, valueAccessor, allBindings) {
...

//Disable the datepicker if the item is disabled or enabled.
    if (allBindings.has('disable')) {
        if (allBindings.get('disable')()) {
            $(element).datepicker('disable');
        }
        else {
            $(element).datepicker('enable');
        }
        var subscription = allBindings.get('disable').subscribe(function (newValue) {
            if (newValue) {
                $(element).datepicker('disable');
            } else {
                $(element).datepicker('enable');
            }
        });

        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            subscription.dispose();
        });
    }
}

你必须用

代码语言:javascript
复制
if (allBindings.has('disable')) {

否则

代码语言:javascript
复制
allBindings.get('disable')

将被未定义为视图中并非所有数据报界绑定字段都具有禁用属性。

票数 2
EN

Stack Overflow用户

发布于 2014-02-25 03:07:52

这里的诀窍是以可观察的方式访问禁用的绑定,这样您就可以附加手动订阅。目前,禁用表达式的结果被传递到bindingHandler (通过allBindingAccessor )。

如果您获得订阅,您可以调用DatePicker的禁用选项

代码语言:javascript
复制
<input id="txtRequestedTo" type="text" placeholder="dd/mm/yyyy"
    data-bind="valueAsDatePicker: reqDateTo, disable: reqDateFrom.disabled" />

JAVASCRIPT

代码语言:javascript
复制
var reqDateFrom = ko.observable();
var reqDateTo = ko.observable();
reqDateTo.disabled = ko.computed( function() { 
     return (reqDateFrom() || '').length === 0; 
} );


ko.bindingHandlers.valueAsDatePicker {
    init: function(element, valueAccessor, allBindingsAccessor) {
        ....
        // ko 3.0 syntax.  For 2.x use allBindingAccessor['disable']
        var subscription = allBindingAccessor.get('disable').subscribe( function(newValue) {
            $(element).datepicker('option', 'disabled', newValue);
        });

        // Make sure the subscription is disposed when the element is torn down
        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            subscription.dispose();
        });
    },
    update: function(element, valueAccessor, allBindingsAccessor) {
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22003090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档