2016-04-05 21 views
0

Ich arbeite in einer Client-Entwicklungsumgebung und muss ihre Codierungsstandards einhalten. Ich habe folgende JS und HTML. Mein ObservableArray kommt als nicht definiert. Ich kann es nicht funktionieren. Sogar die console.logs drucken die korrekten Werte.ObservableArray ist nicht definiert

Bitte mach dir keine Sorgen über ko.applyBindings. Es ist gesorgt.

Mein JS-Code:

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()); 
       }; 
      } 
     } 
    } 
); 

Mein HTML-Code:

<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 nicht

+0

@ user3297291, es wurde gesorgt. Das wurde der Frage auch hinzugefügt. – user2281858

+0

Ich bemerkte, dass du es hinzugefügt hast, also habe ich meinen Kommentar entfernt. Ihre Frage macht nicht wirklich deutlich, was der bindende Kontext des HTML ist. 'getDetails' erzeugt ein beobachtbares Array mit dem Namen' anotherObservableArray', das jedoch nur im Rahmen der Methode existiert. – user3297291

+0

@ user3297291 Wie kann ich es zu einem globalen Bereich Array machen? – user2281858

Antwort

1

Sie nicht anotherObservableArray außerhalb der Funktionsumfang setzen Sie es in deklarieren Grundsätzlich Code ist dieses Format:

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

Sie irgendwie brauchen um die anotherObservableArray außerhalb der Funktion freizulegen. Zum Beispiel:

{ 
    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

das Problem behoben ... aber ich stehe vor einem neuen Problem. siehe hier http://stackoverflow.com/questions/36434173/observablearray-not-updating-the-ui – user2281858

1

Verschieben var anotherObservableArray = ko.observableArray(); auf Ihre VM-Definition definiert ist, und vergewissern Sie sich, ausgesetzt (dh "Öffentlichkeit"). Ich stelle mir vor Ihnen so etwas wie dies tun haben.

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

    anotherObservableArray: ko.observableArray() 
}; 

// ... 

ko.applyBindings(vm);