【发布时间】: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