2013-08-08 2 views
2

Невозможно сопоставить json с наблюдаемым массивом. Я использую код из учебника (http://learn.knockoutjs.com/).knockout.js не отображает наблюдаемую массив из json

function Movie(data) { 
    this.name = ko.observable(data.name); 
    this.description = ko.observable(data.description); 
    this.duration = ko.observable(data.duration); 
    this.id = ko.observable(data.id); 
    this.imdb_id = ko.observable(data.imdb_id); 
    this.original_name = ko.observable(data.original_name); 
    this.poster = ko.observable(data.poster); 
    this.type = ko.observable(data.type); 
    this.year = ko.observable(data.year); 
} 

function MovieListViewModel() { 
    // Data 
    var self = this; 

    self.moviesArray = ko.observableArray([]); 
    self.searchQuery = ko.observable(); 

    self.searchMovies = function() { 
     $.getJSON("/api/v1/movies/search/", {"query": self.searchQuery }, function(allData) { 
      var mappedMovies = $.map(allData.movies, function(item) { return new Movie(item) }); 
      console.log(mappedMovies); // in this line output: [Movie, Movie, Movie, Movie, Movie, Movie] 

      self.moviesArray(mappedMovies); 
      console.log(self.moviesArray); // in this line output: [] 
     });  
    }; 
} 

ko.applyBindings(new MovieListViewModel()); 

Я не понимаю, что не так.

P.S. Извините за мой английский

+0

Вы пробовали: 'console.log (self.moviesArray());'? –

+0

Это действительно странно, но 'console.log (anyObservableArray)' показывает '[]'. – FakeRainBrigand

ответ

2

Это

{"query": self.searchQuery } 

Должно быть

{"query": self.searchQuery() } 

Это

console.log(self.moviesArray) 

Должно быть

console.log(self.moviesArray()) 
+0

Спасибо, я новичок в javascript :) – Nameoff

+0

Нокаут странный. Вам не нужно делать это для не наблюдаемых значений. – FakeRainBrigand

Смежные вопросы