2012-08-29 80 views
0

我想知道是否有任何可能性從函數中獲取選擇選項值,該函數使用參數調用。Knockout.js選擇選項動態編號

例如:

我的標記

<select data-bind="options: $root.getOptions('one', $data.ID), optionsCaption: '...', optionsText:'Txt', optionsValue:'ID'"> 

我的js

self.getSelectionData = function (type, param) { 
    if (type == "one") { 
     var idParam = new Object(); 
     idParam.id = param(); 
     $.getJSON('/MyController/MyGetAction', idParam, function (result) { 
      var r = ko.mapping.fromJS(r); 
      return r; 
     }); 
    } 
}; 

的 「R」 確實包含正確的數據,但沒有數據顯示在選擇。

我嘗試了幾件事,但無法做到。任何想法(或暗示我做錯了)?

回答

1

你應該把return$.getJSON之前,因爲你getSelectionData函數返回什麼,而不是JSON請求的結果:

return $.getJSON('/MyController/MyGetAction', idParam, function (result) { 
    var r = ko.mapping.fromJS(result); 
    return r; 
}); 

或者你可以在getSelectionData功能定義r

self.getSelectionData = function (type, param) { 
    if (type == "one") { 
     var idParam = new Object(); 
     idParam.id = param(); 
     var r; 
     $.getJSON('/MyController/MyGetAction', idParam, function (result) { 
      r = ko.mapping.fromJS(result); 
     }); 
     return r; 
    } 
}; 
+0

耶!謝謝 !必須將請求更改爲async false,這可能不是最好的解決方案,但對我來說現在可以。 –

+1

你不應該在你的viewModel的函數內部做這樣的ajax調用。在viewModel之外進行ajax調用可能更有意義,並將self.selectionData指定爲可觀察數組,然後在您的ajax調用返回時更新它。這更符合淘汰賽模式。 –