2014-04-28 32 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