2015-02-12 73 views
0

我在嘗試使用敲除綁定到select時遇到了一些麻煩。綁定敲除選擇值到鍵/值數組

我想對長相結合像

{ 
    "SomeProperty": 1, 
    "Attributes": [ 
    { 
     "name": "EmailId", 
     "value": "1111" 
    }, 
    { 
     "name": "Something", 
     "value": "223" 
    }, 
    { 
     "name": "SomethingElse", 
     "value": "19999" 
    }, 
    { 
     "name": "IsActive", 
     "value": true 
    } 
    ], 
} 

我的選擇數據綁定正確的數據源和我得到的選項正確填充

<select class="form-control" 
       data-bind="options: $root.types, 
       optionsText: 'Key', 
       optionsValue: 'Value', 
       // value:1111, 
       value: $root.helperText($data.Attributes(), 'EmailId'), 
       optionsCaption: 'Please Select...'"> 
     </select> 

最後幫助我嘗試設置選定的值看起來像

self.helperText = ko.computed({ 
       read: function(attributesToSearch, idToSearchBy) { 
        debugger 
        return ""; 
       }, 
       write: function(attributesToSearch, idToSearchBy){ 
        if (attributesToSearch != undefined) { 
         debugger 
         $.grep(attributesToSearch, function(e) { 
          if (e.name() == idToSearchBy) { 
           return e.value(); 
          } 
          return null; 
         }); 
        } 
       } 
      }); 

現在我沒有得到任何問題而代碼邏輯似乎正常工作,但沒有返回值。

我已經試過

<span data-bind="value:$root.helperText($data.Attributes(), 'EmailId')"></span> 

但是沒有任何回報,我在做一些愚蠢的錯誤嗎?

任何幫助將是非常有益的

+0

可以讓我們與您的問題小提琴。我沒有得到的一件事就是爲什麼你的值綁定就像下拉菜單一樣,你不能簡單地捕獲選定的值,即'value:$ data.someobservable' – 2015-02-12 07:25:55

+4

你不能像這樣使用'computed'。 'read'函數應該是一個沒有參數的函數,'write'函數應該只有一個參數(新值)。查看[這部分文檔](http://knockoutjs.com/documentation/computed-writable.html)。 – Jeroen 2015-02-12 12:41:09

+1

無論如何,爲了能夠幫助你,我必須使用第二個@supercool:我們需要一個repro,或者至少是你的視圖模型的代碼。最好創建一個Stack Snippet(它在編輯器工具欄上)來重現您的場景。 – Jeroen 2015-02-12 12:41:59

回答

0
  • 要綁定value<span>元素,而它只是針對表單元素。
  • A computed不是你可以用你希望的任何參數執行的函數。它與構造函數/對象中定義的一個或多個其他可觀察項相關聯。
  • 對於writable computed的的函數返回一個綁定的顯示輸出,和你的read函數返回'',所以那當然,你不會看到一個值。
    功能是可以通過的功能參數value,通常綁定到一個表單元素,這將改變計算所綁定到的原始可觀察性。

例如,前一陣子,我想知道如何<textarea>可以成爲輸入一個選項列表(每一個新的線是一個選項),使用驗證,並沒有爲視圖創建單獨的觀測。下面是使用的組件計算出的可寫的一個很好的例子:

http://jsfiddle.net/kevinvanlierde/8ht5zg2c/1/