【问题标题】:String empty to null custom binding字符串空到空自定义绑定
【发布时间】:2013-09-29 00:46:09
【问题描述】:

基于这个答案Knockout.js: time input format and value restriction,我正在尝试创建一个自定义绑定,如果值为空字符串,则将 observable 设置为 null,这是不起作用的代码,Ip observable 在模型上始终为 null

ko.bindingHandlers.stringEmptyNull = {
        init: function (element, valueAccessor, allBindingsAccessor) {
            var underlyingObservable = valueAccessor();
            var interceptor = ko.dependentObservable({
                read: underlyingObservable,
                write: function (value) {
                    if (value != null && value.trim() == '')
                        underlyingObservable();
                }
            });
            ko.bindingHandlers.value.init(element, function () { return interceptor }, allBindingsAccessor);
        },
        update: ko.bindingHandlers.value.update
    };

输入:

<input type="text" data-bind="stringEmptyNull: Ip" />

型号:

var Model = function () {
        this.Ip = ko.observable()
        ko.applyBindings(this, $myForm[0]);
    };

    instance = new Model();

【问题讨论】:

    标签: knockout.js custom-binding


    【解决方案1】:

    您的问题在于您的interceptor

    write 函数中,当value 为空字符串时,您需要将underlyingObservable 设置为null(仅调用underlyingObservable(); 仅获取其值但不会将其值设置为null ) 在其他情况下,您还需要将value 传递给underlyingObservable

    var interceptor = ko.dependentObservable({
        read: underlyingObservable,
        write: function (value) {
            if (value != null && value.trim() == '')
                underlyingObservable(null);
            else
                underlyingObservable(value);
        }
    });
    

    演示JSFiddle。 (打开浏览器的控制台,然后在文本框中输入一些内容,然后清除文本框)

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      相关资源
      最近更新 更多