2014-10-07 64 views
0

我使用knockoutjs這樣在外地的約束下拉:Knockoutjs - 在下拉菜單中設定值

<select name="CanBePickedUpDropDown" id="CanBePickedUpDropDown" data-bind="value: CanBePickedUp"> 
    <option selected="selected" value="True">Yes</option> 
    <option value="False">No</option> 
</select> 

在我的視圖模型,現場看起來是這樣的:

var viewModel = function() { 
    var self = this; 
    self.CanBePickedUp = ko.observable(""); 
} 

現在我有一個將下拉值保存到數據庫的Web API。到目前爲止,它的工作。當我在下拉列表中選擇「否」時,它將數據庫中的保存(PUT)保存爲0(假)。我的問題是當涉及到加載。我似乎無法獲得下拉列表以將值設置爲「否」。 Web API如下所示:

self.LoadItem = function() { 
    $.ajax({ 
     type: "GET", 
     contentType: "application/json", 
     url: "Home", 
     dataType: "json", 
     success: function (result) { 
      var data = ko.utils.parseJson(result); 
      if (data.CanBePickedUp === true) 
       self.CanBePickedUp("Yes"); 
      else 
       self.CanBePickedUp.value = "No"; 
     }, 
     error: function (xhr, err) { 
     } 
    }); 
}; 

在上面的調用中,data.CanBePickedUp正確返回false。我想將其分配給self.CanBePickedUp,以便我的下拉列表顯示「否」(它也顯示「是」)。我已經試過:

self.CanBePickedUp.value = "No"; 
self.CanBePickedUp.value = false; 
self.CanBePickedUp("No"); 
self.CanBePickedUp(false); 

但他們沒有工作

回答

2

你正在做它的方式是錯誤的,因爲每個文檔。以下是你如何達到相同的目的。

  • 創建observableArray具有所有可能的選項
  • 創建另一個觀察到,這將保持活躍值...

並設置可觀察到是或否按規定值

JSFiddle here _ http://jsfiddle.net/5v96a6bp/1/

var viewModel = function() { 
     var self = this; 
     self.canBePickedOptions = ko.observableArray(["Yes","No"]); 
     self.selectedOption = ko.observable(); 

self.LoadItem = function() { 
    $.ajax({ 
     type: "GET", 
     contentType: "application/json", 
     url: "Home", 
     dataType: "json", 
     success: function (result) { 
      var data = ko.utils.parseJson(result); 
      if (data.CanBePickedUp === true) 
       self.selectedOption("Yes"); 
      else 
       self.selectedOption("No"); 
     }, 
     error: function (xhr, err) { 
     } 
    }); 
}; 
1

嘗試self.CanBePickedUp("False")