Nameoff
Nameoff

Reputation: 45

knockout.js not mapping observable array from json

Can't map json to observable array. I use code from tutorial (http://learn.knockoutjs.com/).

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

I do not understand what is wrong.

P.S. Sorry for my english

Upvotes: 2

Views: 1293

Answers (1)

Brigand
Brigand

Reputation: 86270

This

{"query": self.searchQuery }

Should be

{"query": self.searchQuery() }

This

console.log(self.moviesArray)

Should be

console.log(self.moviesArray())

Upvotes: 2

Related Questions