2014-10-07 5 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> 

В моем ViewModel, поле выглядит следующим образом:

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

Теперь у меня есть Web API, который сохраняет выпадающее значение в базе данных. Пока это работает. Когда я выбираю «Нет» в раскрывающемся списке, он получает в базе данных (PUT) как 0 (false). Моя проблема заключается в загрузке. Кажется, мне не кажется, что выпадающее меню задает значение «Нет». 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 правильно возвращает ложь. Я хотел бы присвоить его self.CanBePickedUp, чтобы в раскрывающемся списке отобразилось «Нет» (он также отображает «Да»). Я пробовал:

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

, но ни один из них не работал

ответ

2

, как вы делаете это неправильно, как в документации. Вот как вы можете добиться того же.

  • Создание observableArray, который имеет все возможные варианты
  • Создание другой наблюдаемой, которая будет удерживать активное значение ...

И установите значение наблюдаемой Да или нет в соответствии с требованием

JSFiddle здесь _ 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")

Смежные вопросы