2014-04-28 206 views
1

如何获得data-bind可观察值绑定的字符串或DOM节点?我在我的网页上使用了knockout.validation.js,并且我的一个默认验证(required)正在被解雇。我想找出哪一个是它是里面例如validateSync @ knockout.validation.js从可观察到的获取绑定

回答

0

过了一会儿,我想出了这样的事:上名字propertyName

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; 
    } 

这个功能会给你一个对象,它仅包含属性(尽管它的嵌套级别)。正在搜索的对象是source。该解决方案基于这样一个事实,即一个可观察对象在绑定时具有字段_id。这里有一个用例,这个函数很有用。

  1. 在一个非平凡形式与结合于一个非平凡视图模型中的一个字段打破验证字段。

  2. knockout.validation.js在功能validateSync放置一个断点if声明的真实路径内后,通过调用检查obeservable的ID:

    observable._id 
    
  3. 调用以下命令来获取所有打破验证字段:

    getPath(ko.dataFor($('<form-selector>')[0]),'_id',<id-of-observable>) 
    

如果有人找到一个更好的解决方案,请与我分享。

0

您可以使用jQuery来获取数据绑定属性的实际值

<span data-bind="value: test"> </span> 


$(function() { 
    // this will get you "value: test" 
    alert($('span').attr('data-bind')); 
}); 

此外,如果你想获得你绑定的实际可观察​​值,可以使用ko.dataFor函数。

ko.dataFor(element) - 返回可用于绑定元素的数据 ko.contextFor(element) - 返回可用于DOM元素的整个绑定上下文。

http://knockoutjs.com/documentation/unobtrusive-event-handling.html

+0

我想你误解了这个问题。我已经有了整个可观察的(参见'knockout.validation.js'中的'validateSync')。我想知道它绑定了什么元素,什么是它的上下文或其他什么来帮助我识别验证器中断的属性。 – SOReader

+0

所以你试图获得绑定到你的可观察对象的实际HTML元素,对吧? – milagvoniduak

+0

呃......或多或少都是。我试图获得任何有助于我在大视野模型中发现失败领域的内容。 – SOReader