【问题标题】:My extended observable is getting "deleted" after call to ko.mapping.fromJS调用 ko.mapping.fromJS 后,我的扩展 observable 被“删除”
【发布时间】:2014-08-22 08:30:58
【问题描述】:

我有一个带有以下扩展器的可观察扩展:

ko.extenders.e2mElementName = function (target, options) {

    var result = ko.dependentObservable({
        read: target,
        write: function (newValue) {
            var current = target.peek();
            if (newValue != current) {

                newValue = newValue.replace(/[^0-9A-Za-z_]/g, "").replace(" ", "_");

                //check if name already exists
                if (!document._editor.elementNames)
                    document._editor.elementNames = [];

                if ($.inArray(newValue, document._editor.elementNames)) {
                    alert("The name '" + newValue + "' was already assigned to an element on this page");
                    target.notifySubscribers(current)
                } else {
                    document._editor.elementNames.remove(current);
                    document._editor.elementNames.push(newValue);
                    target(newValue);
                }

            }
        }
    }).extend({ notify: 'always' });

    //result(target());

    return result;
};

当我在构造时扩展 observable 一切正常,在我的对象构造中我有:

this.Name = ko.observable("").extend({ e2mElementName: true });

但是在我调用 mapping.fromJs 之后,我的 observable 被更改为字符串 ex: "My Name" ...

ko.mapping.fromJS(rawData, mapping, this);

如果我删除扩展器一切正常,我有可观察的包装字符串....

我做错了什么?

【问题讨论】:

    标签: javascript knockout.js mapping


    【解决方案1】:

    你可以在调用 ko.mapping.fromJS 后添加扩展器

    var applyMapping = function(rawData) {
      ko.mapping.fromJS(rawData, {}, this);
      this.name = this.name.extend({e2ElementName: true});
    }
    

    或者您可以为此使用映射插件选项

    var mappingOptions = {
      // customize the creation of the name property
      name: {
        create: function(data) {
            return ko.observable(data.name).extend( {e2ElementName: true} );
        }
      }
    };
    
    ko.mapping.fromJS(data, mappingOptions, this));
    

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多