如何获得可观察到的data-bind
字符串或DOM节点?我在我的网页上使用knockout.validation.js,我的一个默认验证(required
)被解雇了。我想知道它在哪个内部,例如validateSync
@ knockout.validation.js
答案 0 :(得分:0)
您可以使用jquery获取data-bind属性的实际值
<span data-bind="value: test"> </span>
$(function() {
// this will get you "value: test"
alert($('span').attr('data-bind'));
});
此外,如果你想获得你绑定的实际observable,你可以使用ko.dataFor函数。
ko.dataFor(element) - 返回可用于绑定元素的数据 ko.contextFor(element) - 返回DOM元素可用的整个绑定上下文。
http://knockoutjs.com/documentation/unobtrusive-event-handling.html
答案 1 :(得分:0)
过了一会儿,我带来了这样的东西:
function getPath(source, propertyName /*, value, result, noDescend */) {
var result = arguments[3] || {};
var valueToFind = arguments[2];
var noDescend = arguments[4];
function merge(dst, name, src) {
var result = {};
result[name] = src;
return $.extend(true, dst, result);
}
for (var p in source) {
var value = source[p];
if (p == propertyName) {
if (!valueToFind || source[p]==valueToFind) {
result[p] = source[p];
}
}
else {
if (!noDescend && (typeof value == 'object' || typeof value == 'function')) {
if (ko.isObservable(value)) {
var r = getPath(value, propertyName, valueToFind, result[p], true);
if (Object.keys(r).length > 0) merge(result, p, r);
}
var r = getPath(ko.utils.unwrapObservable(value), propertyName, valueToFind, result[p]);
if (Object.keys(r).length > 0) merge(result, p, r);
}
}
}
return result;
}
此函数将为您提供一个对象,该对象仅包含名称propertyName
上的属性(尽管其嵌套级别)。被搜索的对象是source
。解决方案基于以下事实:当一个observable被绑定时,它具有字段_id
。这是一个有用的功能的用例。
在一个非平凡的形式中,字段绑定到一个非平凡的视图模型,其中一个字段会中断验证。
在if
的函数validateSync
中的knockout.validation.js
语句的true-path中放置断点后,通过调用以下方法检查obeservable的ID:
observable._id
调用以下命令获取所有中断验证的字段:
getPath(ko.dataFor($('<form-selector>')[0]),'_id',<id-of-observable>)
如果有人找到更好的解决方案,请与我分享。