2014-01-14 2 views
2

В мой контроллер:Как связать строку json в наблюдаемом массиве?

public ActionResult GetCountryList() { 
    return Json(new {data = db.Country.ToList()},JsonRequestBehavior.AllowGet); 
} 

в моем Koки:

self.GetCountryList = function() { 
    $.getJSON("/ProfileCore/GetCountryList", function (result) { 
     self.LocationList(result.data); 
     console.log(self.LocationList()); 
    }) 
}; 

выберите HTML:

<select data-placeholder="Location" class="chosen-select" style="width:100%;" tabindex="2" data-bind="options:LocationList, optionsText:'CountryName', optionsValue:'Id', value:Location"></select> 

при просмотре журнала консоли, это результат: console result

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

+0

Что вы имеете в виду на "нет данных выберите опцию"? В нем нет элементов, если вы откроете раскрывающийся список? Или ваше текущее местоположение не выбрано? – nemesv

+0

Нет элементов в раскрывающемся меню. ваше право, вот что я имел в виду – comfreakph

+0

Я не вижу ничего плохого в вашем коде. self.LocationList - наблюдаемый массив, я полагаю. Не ясно видно. Можете ли вы сделать небольшую скрипку с издеваемыми данными? Это будет легче отлаживать. –

ответ

1

Это, как я хотел бы сделать это:

// Create an object 
var Country = function (Id, Name) { 
     self = this; 
     self.Id = Id; 
     self.CountryName = Name; 
    } 

// Create a mapping object 
    var mapping = { 
     'LocationList': { 
      create: function(options) { 
       return new Country(options.data.Id, options.data.CountryName); 
      } 
     } 
    } 

// Create the view model 
function AViewModel() 
{ 
    var self = this; 
    self.LocationList = ko.observableArray(); 
    self.Location = ko.observable("2"); 

    // Map the json to the view model 
    $.ajax({ 
     url:"/echo/json/", 
     data:data, 
     type:"POST", 
     success:function(response) 
     { 
     self.LocationList = ko.mapping.fromJS(response, mapping, self); 
     } 
    }); 


} 

var viewModel = new AViewModel(); 
ko.applyBindings(viewModel); 

jsFiddle с притворным вызовом JSon:

http://jsfiddle.net/hutchonoid/Tnyqp/10/

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