2015-07-27 2 views
-2

Внутри этого фрагмента кода Я создаю список флажков по выпадающему списку для каждого элемента флажка. Если установлен какой-либо флажок, он отобразится в выбранной области и наоборот. Не я просто хочу получить приведенные ниже значения:KnockOut получить выбранное значение флажка с выпадающим списком

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

function Builder(item) { 
 
    this.id = ko.observable(item.id), 
 
    this.title = ko.observable(item.title) 
 
    this.occurence = ko.observable(item.occurence) 
 
    this.selectedOne = ko.observable(); 
 
} 
 

 
function Generator(choices) { 
 
    return ko.utils.arrayMap(choices, function (item) { 
 
     return new Builder(item); 
 
    }) 
 
} 
 
var viewModel = {}; 
 
viewModel.choices = { 
 
    "results": [{ 
 
     "id": 1, 
 
      "title": "Category 1", 
 
      "occurence": [{ 
 
      "Selected": false, 
 
       "Text": "Every Week", 
 
       "Value": "1" 
 
     }, { 
 
      "Selected": false, 
 
       "Text": "Every Month", 
 
       "Value": "2" 
 
     }] 
 
    }, { 
 
     "id": 2, 
 
      "title": "Category 2", 
 
      "occurence": [{ 
 
      "Selected": false, 
 
       "Text": "Every Week", 
 
       "Value": "1" 
 
     }, { 
 
      "Selected": false, 
 
       "Text": "Every Month", 
 
       "Value": "2" 
 
     }] 
 
    }] 
 
}; 
 
viewModel.Looper = ko.observableArray(
 
Generator(viewModel.choices.results)); 
 

 
viewModel.testing = ko.observableArray(); 
 
viewModel.selectedChoices = ko.observableArray(); 
 

 
viewModel.selectedChoicesDelimited = ko.computed(function() { 
 
    if (viewModel.selectedChoices()) { 
 
     viewModel.testing([]); 
 
     ko.utils.arrayForEach(viewModel.selectedChoices(), function (item1) { 
 
      ko.utils.arrayFilter(viewModel.Looper(), function (item2) {     
 
       if (item1 == item2.id()) { 
 
       viewModel.testing.push(item2); 
 
        return true; 
 
       } 
 
      }); 
 
     }); 
 
    } 
 
    //return viewModel.selectedChoices().join(","); 
 
}); 
 

 
ko.applyBindings(viewModel);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<h1>Select Items</h1> 
 

 
<ul class="options" data-bind="template: { foreach: Looper }"> 
 
    <li> 
 
     <label> 
 
      <input type="checkbox" name="NotifyMembers" data-bind="attr: { value: $data.id }, checked: $parent.selectedChoices" /><span data-bind="text: $data.title"></span> 
 

 
     </label> 
 
     <select data-bind="options:$data.occurence,optionsText:'Text',optionsValue:'Value',value:selectedOne"></select> 
 
    </li> 
 
</ul> 
 
<hr /> 
 

 

 
<h1>Your Selected Items</h1> 
 
<ul class="options" data-bind="foreach: testing"> 
 
    <li> 
 
     <label> 
 
      <input type="checkbox" name="NotifyMembers" data-bind="attr: { value: $data.id }, checked: $parent.selectedChoices" /><span data-bind="text: $data.title"></span> 
 

 
     </label> 
 
     <select data-bind="options:$data.occurence,optionsText:'Text',optionsValue:'Value',value:selectedOne"></select> 
 
    </li> 
 
</ul> 
 
<div data-bind="text: selectedChoices"></div>

+1

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

+0

Да, вы решили мою проблему относительно привязки вложенного. Но я хочу получить значения выпадающего списка и флажка, если флажок установлен. и обновить значение, если выпадающее меню изменяется. Я использую '

', но также хочу выпадающее значение. –

+2

Я перечитываю его несколько раз, но я совершенно не понимаю, о чем идет речь (в частности, смелая часть). – Jeroen

ответ

0

Вы можете Simpy использовать существующий код и добиться того, что вы ищете

вид:

<div data-bind="foreach:testing"> 
    <span data-bind="text:$data.name"></span> 
    <span data-bind="text:$data.selectedOne"></span> 
</div> 

Рабочий образец до here

+0

проверить консоль, вы можете исправить ее самостоятельно, и вы можете узнать дальше. после некоторого усилия вы можете ping мне ошибку, я попытаюсь исправить это для вас –