2016-04-27 3 views
0

Привет Я пытаюсь сделать foreach с помощью наблюдаемого массива, и я не получаю никакого результата.knockout js observableArray не работает

Где, как в файле javascript, при отладке данных загружается массив. HTML код приведен ниже:

<!-- ko foreach: currencyarr --> 
    <option data-bind="value:id, text:label"></option> 
<!-- /ko --> 

И содержание JSON файл следующим образом:

"name" : "shuvagho", 
"curarr" : [ 
      {"id": "inr", "label": "INR"}, 
      {"id": "usd", "label": "USD"}, 
      {"id": "aud", "label": "AUD"}, 
      {"id": "sgd", "label": "SGD"} 
] 

А Javascript кода с помощью нокаута JS выглядит следующим образом:

self.currencyarr = ko.observableArray(); 
self.currencyarr(data.curarr); 

ответ

2

Вы забыли использовать $ data внутри foreach.

var ViewModel = function(){ 
 
     var self = this; 
 
     self.currencyarr = ko.observableArray(); 
 
     self.currencyarr(data.curarr); 
 
    } 
 
    var data = { 
 
    "name" : "shuvagho", 
 
    "curarr" : [ 
 
       {"id": "inr", "label": "INR"}, 
 
       {"id": "usd", "label": "USD"}, 
 
       {"id": "aud", "label": "AUD"}, 
 
       {"id": "sgd", "label": "SGD"} 
 
    ]}; 
 

 
    var viewModel = new ViewModel(); 
 

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

 
<select> 
 
<!--ko foreach: currencyarr--> 
 
    <option data-bind="text:$data.label, value:$data.id" ></option> 
 
<!--/ko--> 
 
</select>

Вы также можете связать параметры в выберите тег.

var ViewModel = function(){ 
 
    var self = this; 
 
    self.currencyarr = ko.observableArray(); 
 
    self.currencyarr(data.curarr); 
 
} 
 
var data = { 
 
"name" : "shuvagho", 
 
"curarr" : [ 
 
      {"id": "inr", "label": "INR"}, 
 
      {"id": "usd", "label": "USD"}, 
 
      {"id": "aud", "label": "AUD"}, 
 
      {"id": "sgd", "label": "SGD"} 
 
]}; 
 

 
var viewModel = new ViewModel(); 
 

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

 
<select data-bind="options:$root.currencyarr, optionsText: 'label',optionsValue:'id'"></select>

+0

Я сделал все выше кодирования, но до сих пор я не мог в состоянии. Это происходит только для наблюдаемогоarray(). Если я использую observable(), чтобы отобразить текст, который он отображает отлично. –

+0

Не могли бы вы разместить здесь свой код? – Guto