2013-12-19 3 views
0

У меня есть следующее сканирование. Ребенок объект Definationсо связыванием не работает со значениями по умолчанию

function SearchFilterOption(data){ 
    var self = this 
    self.FilterCheck  = ko.observable(false) 
    self.List    = ko.observableArray([]) 
    self.SelectedOptions = ko.observableArray([]) 
    self.FilterText   = ko.computed(function(){ 
     var selectedDescriptions = []; 
     ko.utils.arrayForEach(self.List(), function (item) { 
      if (in_array(item.Value, self.SelectedOptions())) 
       selectedDescriptions.push(item.Description) 
     }) 
     return selectedDescriptions.join(',') 
    }) 
    self.FilterLabel  = ko.computed(function(){ 
     return (self.SelectedOptions() && self.SelectedOptions().length > 0) ? 'selected_filter' : '' 
    }) 
    self.FilterClass  = ko.computed(function(){ 
     self.List(data) 
     return (self.FilterCheck() == true) ? 'set_check':'un_check'    
    }) 

    self.Toggle = function(){ 
     self.FilterCheck(!self.FilterCheck()) 
    } 
} 

Родитель модель

var page = function() { 
    var self = this 
    self.LookupData = ko.observableArray() 
    self.Countries = ko.observableArray([]) 

    self.LoadData = function(){ 
     self.GetProfileData() 
     self.GetPreviousSearch() 
    } 

    self.GetProfileData = function(){ 
     var url  = 'ProfileApi/Index' 
     var type = 'GET' 
     var data = null 
     ajax(url , data , self.OnGetProfileDataComplete , type)      
    } 
    self.OnGetProfileDataComplete = function(data){ 
     self.LookupData(getLookupData()) 
     self.Countries(new SearchFilterOption(self.LookupData().Countries)) 
    } 

    self.GetPreviousSearch = function(){ 
     var url  = 'SearchApi/PreviousSearch' 
     var type = 'GET' 
     var data = null 
     ajax(url , data , self.OnGetPreviousSearchComplete , type)     
    } 
    self.OnGetPreviousSearchComplete = function(data){ 
     var search = data.Payload 
     if(search.locationCountryList){self.Countries().SelectedOptions(self.MakeInt(search.locationCountryList))} 
    } 

    self.MakeInt = function(array){ 
     return array.map(function(item) { 
      return parseInt(item, 10); 
     })    
    } 

    self.LoadData() 
} 

И связывание

$('document').ready(function() { 
     ko.applyBindings(new page()) 
}) 

<div data-bind="with:Countries"> 
    <ul class="srh_fltr"> 
     <li> 
      <label class="" data-bind="css:FilterLabel">Countries</label> 
      <p data-bind="text:FilterText"></p> 
      <div class="check_box"> 
       <a class="un_check active" data-bind="css:FilterClass,click:Toggle"> 
        <img src="../images/spacer.gif"> 
       </a> 
      </div> 
     </li> 
    </ul> 
    <section class="form_view" data-bind="visible:FilterCheck"> 
    <select multiple="multiple" data-bind=" 
      options:List, 
      optionsText:"Description", 
      optionsValue:"Value", 
      optionsCaption:"--- ", 
      value:0, 
      selectedOptions:SelectedOptions"></select> 
    </section> 
</div> 

Ниже приведен пример поиска данных

[{ 
    "Value": 1, 
    "Description": "United States" 
}, { 
    "Value": 2, 
    "Description": "Canada" 
}, { 
    "Value": 3, 
    "Description": "United Kingdom" 
}, { 
    "Value": 4, 
    "Description": "Pakistan" 
}, { 
    "Value": 5, 
    "Description": "India" 
}, { 
    "Value": 6, 
    "Description": "Saudi Arabia" 
}, { 
    "Value": 7, 
    "Description": "U.A.E." 
}, { 
    "Value": 8, 
    "Description": "Afghanistan" 
}, { 
    "Value": 9, 
    "Description": "Albania" 
}] 

OK. Код завершен. Проблема в том, что при вызове GetPreviousSearch и self.Countries().SelectedOptions() ничего не выбрано. Я имею в виду, FilterText не отображается. я видел в консоли объект содержит данные, заполненные GetPreviousSearch, но ui не изменяется? Как я могу решить эту проблему. Я подозреваю, что with, возможно, придется что-то с этим сделать.

Here является скрипкой.

+0

Можно ли поставить скрипку здесь? – DevelopmentIsMyPassion

+0

@AshReva см. Скрипку [здесь] (http://jsfiddle.net/raheelshan/afCD4/23/) –

+0

у вашей скрипки есть ошибка. Что такое «in_array»? Является ли эта функция? – DevelopmentIsMyPassion

ответ

0

я решил вопрос проблемы здесь

<select multiple="multiple" data-bind=" 
     options:List, 
     optionsText:"Description", 
     optionsValue:"Value", 
     optionsCaption:"--- ", 
     value:0, 
     selectedOptions:SelectedOptions"></select> 
</section> 

В этом я должен удалить атрибут значения для множественного выбора. Я обнаружил, что значение создает проблему, если используется с selectedOptions в multiselect. Хотя если selectedOptions используется с выпадающим списком, это не создает никаких проблем.

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