2012-03-21 16 views
6

Ho appena iniziato a utilizzare knockout.js e funziona perfettamente con le offerte normali. Ho un problema con observableArray.Crea ko.observableArray da oggetti JSON in knockout

Voglio creare un osservableArray e assegnargli un dato JSON da Google Feed API. Ecco il formato JSON https://developers.google.com/feed/v1/devguide#resultJson

google.load("feeds", "1"); // Loads Google Feed API 
function FeedViewModel() 
{ 
    // Data 
    var self = this; 
    self.allEntries = null; 

    // Example property, and it works 
    self.feedHead = ko.observable("BBC News"); 

    var feed = new google.feeds.Feed("feeds.feedburner.com/BBCNews"); 
    feed.setResultFormat(google.feeds.Feed.JSON_FORMAT); 
    feed.includeHistoricalEntries(); 
    feed.setNumEntries(30); 

    // Loads feed results 
    feed.load(function (result) { 
     if (!result.error) {   
      self.allEntries = ko.observableArray(result.feed.entries); 

      // accessing the title from here is OK 
      alert(self.allEntries()[1].title); 
     }   
    }); 
} 

Nell'esempio di cui sopra, l'accesso alla serie dal ViewModel è OK, ma ho bisogno di visualizzarlo nella vista (al browser) utilizzando foreach: allEntries

<h2 data-bind="text: feedHead">Latest News</h2> 
<!-- ko foreach:allEntries --> 
    <div class="lists"> 
     <a href="#" data-bind="text: title"></a> 
    </div> 
<!-- /ko --> 

Ma niente del ciclo foreach ko non restituisce nulla. L'avanzamento osservabile è OK.

Inoltre, non ho alcun errore JS. Qualsiasi aiuto ..

+0

abbastanza sicuro che è necessario per creare l'array in anticipo, quindi nel tuo carico riempi quella matrice ...... –

risposta

22

Prova dichiarando (dove si ha la Dati //)

self.allEntries = ko.observableArray([]); 

poi nel carico ...

self.allEntries(result.feed.entries); 
+0

Grazie Keith, funziona bene. – Maxali

+2

Hey Maxali, è possibile che tutto funzioni in JSFIDDLE? Mi piace molto vedere un esempio funzionante del rendering del feed. Potrebbe rivelarsi utile per me. Grazie –

+0

+1 per la soluzione. Sorpreso dal fatto che questa risposta non abbia già avuto 10 voti in più in quanto è una di queste domande/risposte a cui molte persone chiedono quando si usa Knockout! : D –

Problemi correlati