2012-03-21 12 views
6

Acabo de empezar a utilizar knockout.js y funciona muy bien con las ofertas normales. Tengo un problema con observableArray.Crear ko.observableArray del objeto JSON en knockout

Quiero crear un array observable y asignarle un dato JSON de la API de Google Feed. Aquí está el 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); 
     }   
    }); 
} 

En el ejemplo anterior, el acceso a la matriz del modelo de vista está bien, pero tengo que mostrarlo en la vista (en el navegador) usando 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 --> 

Pero nada del bucle ko foreach no devuelve nada. El feedHead observable está bien.

Además, no tengo ningún error JS. Cualquier ayuda ..

+0

bastante seguro de lo que necesita para crear la matriz por adelantado, a continuación, en tu carga llenas esa matriz ...... –

Respuesta

22

Trate declarar (en el que tiene los datos //)

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

entonces en la carga ...

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

Gracias Keith, funciona bien. – Maxali

+2

Hola Maxali, ¿es posible que pongas todo funcionando en JSFIDDLE? Me gusta mucho ver un ejemplo funcional de la fuente que se está procesando. Puede ser útil para mí. Gracias –

+0

+1 por solución. Sorprendido de que esta respuesta aún no haya recibido 10 votos, ya que es una de estas preguntas/respuestas que mucha gente va a preguntar al utilizar Knockout. : D –

Cuestiones relacionadas