2014-06-25 24 views
2

雖然我無法從選擇下拉列表中選擇值,但顯示如下,但有以下淘汰視圖模型。我看不出爲什麼,但我可以使用jquery而不是從實際的ko模型中工作?!任何人都可以看到爲什麼這是我的問題?檢索計算函數中的視圖模型值問題

http://jsfiddle.net/35SuT/6/

很多很多,謝謝! 剃刀

淘汰賽設置

(function(ns) { 
    var jsonObject = { 
     "People": [ 
      {"Selected":false, "Text":"Tom", "Value":"1"}, 
      {"Selected":false, "Text":"Jane", "Value":"2"}, 
      {"Selected":false, "Text":"Sarah", "Value":"2"}, 
      {"Selected":false, "Text":"Olive", "Value":"3"}, 
      {"Selected":false, "Text":"Other", "Value":"4"}]}; 

      var viewModel = new ViewModel(jsonObject);    
      ko.applyBindings(viewModel); 

})(namespace("so.question")); 

視圖模型

var ViewModel = (function (dump) { 
    var panels = { 
    Area1: { 
     peopleArray: ko.observableArray(dump.People), 
     peopleSelected: ko.observable(self.peopleSelected) 
    }}; 

    return panels; 
}); 

這個作品

panels.Area.get = ko.computed(function() { 
    return $('#people option:selected').text()) // THIS WORKS 
}, this); 

失敗

panels.Section1.fullName = ko.computed(function() { 
    return panels.Section1.) // BUT THIS FAILS!?? 
}, this); 

標記

<!--This markup does show the array correctly--> 
<select id="people" data-bind="options: panels.peopleArray, optionsText: 'Text'"></select> 
+0

你viewmodel很腥。你可以簡單嗎 –

+0

我可以重構它,但不是現在..你可以說,爲什麼它只適用於jQuery? (我假設你提到'腥',因爲我不使用函數?) – user3773890

+0

這裏是一個小提琴。請修改,以便它可以工作。 http://jsfiddle.net/35SuT/3/。然後我們可以實現實現 –

回答

0

問題是你沒有選擇的事件添加到控件。有效的方法是訂閱的選擇改變

你可以像這樣,使用訂閱

viewModel.panels.Area1.peopleSelected.subscribe(function (data) { 
      console.log(data) 
      panels.Area1.peopleSelected(data); 
      //Set selection value to your observable variable 
     }); 
0

因爲你沒有正確綁定。順便說一句,我很困惑,你的問題和你的jsfidder使用不同的代碼!

解決你的問題結合:

<select id="people" data-bind="value: panels.peopleSelected, 
    options: panels.peopleArray, optionsText: 'Text'"></select> 

請修正jsfidder的結合:(無()上selectedTitle,您希望將觀察到的,而不是它的值綁定)

<select data-bind="options: Section1.titlesArray; optionsText: 'Text', 
    value: Section1.selectedTitle, optionsValue: 'Value'"></select>