2014-10-09 51 views
0

我正在從服務器獲取選擇列表並填充observableArray。然後我想將選定的項目設置爲預定義的值。我有一個非常簡單的jsFiddle,它可以模擬通過單擊按鈕從服務器拉取數據。Knockout預定義的默認選項綁定到可觀察數組

http://jsfiddle.net/JonathanN/hev1rqeu/

這裏的Java腳本的基本嘗試:

(function() { 
    var vm = (function() { 
     var self = this;   
     self.array = ko.observableArray([]);   
     self.selectedValue = ko.observable(); 
     self.useSetTimeout = ko.observable(false);   
     self.array.subscribe(function(newValue) { 
      self.selectedValue('b'); 
     });  
     self.populate = function() { 
      self.array(['a','b','c']); 
     };  
    }()); 
    ko.applyBindings(vm); 
}()); 

這是我的解決辦法,它取代 「self.selectedValue( 'B');」:

var waitForSelectToPopulate = function() { 
    self.selectedValue('b'); 
    if(self.selectedValue() != 'b') { 
     setTimeout(waitForSelectToPopulate, 10); 
    } 
}; 
waitForSelectToPopulate();    

作爲解決方法,我不太喜歡這個。似乎應該有一個合理的方法來處理這個問題,但只是設置訂閱觸發器的值似乎不起作用。

回答

1

一旦填入事件已經去了,並得到了JSON,並將其放入你的數組中,WH你不只是剛剛設置的價值?只要您在self.array中設置數據,它就會更新。

(function() { 
    var vm = (function() { 
     var self = this; 

     self.array = ko.observableArray([]); 
     self.selectedValue = ko.observable(); 

     self.populate = function() { 
      // magical assmagic goes and get's json, and converts it to ['a','b','c'] 
      self.array(['a','b','c']); // dropdown is now populated 
      self.selectedValue('c'); // therefore we can set it to a valid value 
     }; 

    }()); 
    ko.applyBindings(vm); 
}()); 

看到以下內容: http://jsfiddle.net/hev1rqeu/5/

相關問題