2016-04-05 3 views
0

Я работаю в среде разработки клиента и должен придерживаться их стандартов кодирования. У меня есть следующие JS и HTML. Мой наблюдаемый массив приходит, как не определено. Я не могу заставить его работать. Даже console.logs печатает правильные значения.observableArray не определен

Пожалуйста, не беспокойтесь о ko.applyBindings. Это позаботится.

Мой JS код:

define(
    ['knockout'], 
    function (ko) { 
     "use strict"; 
     return { 
      onLoad: function (widget) { 
       widget.getDetails= function (prod) { 
        var abc = prod.DetailsNumbers(); 
        console.log(abc); 
        var someArray= []; 
        someArray= abc.split(','); 
        //console.log(someArray); 
        var anotherObservableArray = ko.observableArray(); 

        for (var i = 0; i < someArray.length; i++) { 
         var temp = { 
          "prodName": ko.observable(someArray[i]) 
         }; 
         anotherObservableArray.push(temp); 
        } 
        console.log(anotherObservableArray()); 
       }; 
      } 
     } 
    } 
); 

Мой HTML код:

<div id="someId"> 
    <table> 
     <tbody> 
      <tr> 
       <td>Button Here</td> 
       <td><button data-bind="click: getDetails(product())">Click me</button></td> 
      </tr>// this here is working fine 
     </tbody> 
    </table> 
    <ul data-bind="foreach: anotherObservableArray"> // this doesnt work 
     <li> 
      <span data-bind="text: prodName"> </span> 
     </li> 
    </ul> 
</div> 

anotherObservableArray не определен

+0

@ пользователь3297291, позаботился. Это также добавилось к вопросу. – user2281858

+0

Я заметил, что вы добавили его, поэтому я удалил свой комментарий. Ваш вопрос не дает четкого представления о том, каков контекст связывания HTML. 'getDetails' создает наблюдаемый массив с именем' anotherObservableArray', но он существует только в рамках метода. – user3297291

+0

@ user3297291 Как я могу сделать это глобальным массивом? – user2281858

ответ

1

Вы не разоблачить anotherObservableArray вне области видимости функции вы объявите его в основном ваш код этого формата:

{ 
    onLoad: function (widget) { 
    widget.getDetails = function (prod) { 
     var anotherObservableArray = ko.observableArray(); 
     // push some items into the array 
     console.log(anotherObservableArray()); 
    }; 
    } 
} 

Вы как-то нужно чтобы открыть функцию anotherObservableArray вне функции. Например:

{ 
    onLoad: function (widget) { 
    widget.getDetails = function (prod) { 
     var anotherObservableArray = ko.observableArray(); 
     // push some items into the array 
     console.log(anotherObservableArray()); 
     this.anotherObservableArray = anotherObservableArray; // Expose it on the function 
    }; 
    } 
} 
+0

, который исправил проблему ... однако я столкнулся с новой проблемой. см. здесь http://stackoverflow.com/questions/36434173/observablearray-not-updating-the-ui – user2281858

1

Move var anotherObservableArray = ko.observableArray(); к вашему определению VM и обеспечить его воздействию (т.е. "общественность"). Я воображал у вас есть что-то вроде этого:.

var vm = { 
    // ... 
    // most likely you are exposing getDetails() already 
    // .... 

    anotherObservableArray: ko.observableArray() 
}; 

// ... 

ko.applyBindings(vm); 
Смежные вопросы