$(document).ready(function () {
function resultItem(title, link, description, image) {
var self = this;
self.title = ko.observable(title);
self.link = ko.observable(link);
self.description = ko.observable(description);
self.image= ko.observable(image);
}
function viewModel() {
var self = this;
self.searchInput = ko.observable("G.R.R. Martin");
self.items = ko.observableArray();
self.mapResults = function (data) {
console.log(data);
_.each(data.items, function (item) {
var resultI = new resultItem(item.volumeInfo.title,
item.volumeInfo.canonicalVolumeLink,
item.volumeInfo.description,
item.volumeInfo.imageLinks.thumbnail
);
self.items.push(resultI); // add to our observable array
});
};
self.search = function () {
self.items.removeAll();
var url = "https://www.googleapis.com/books/v1/volumes?q=" + self.searchInput();
$.ajax({
url: url,
type: "GET",
success: function (data) {
self.mapResults(data);
}
});
};
}
var vm = new viewModel();
ko.applyBindings(vm);
});
<div id="container">
<div>
<input id="txtSearch" type="text" data-bind="value:searchInput" />
<input id="btnSearch" type="button" data-bind="click:search" value="Search Books" />
</div>
<ul data-bind="foreach:items">
<li><img data-bind="attr: { src: image}"/>
<a data-bind="attr: { href: link, title: description}, text: title"></a>
<br/><span data-bind="text:description" />
</li>
</ul>
</div>
External resources loaded into this fiddle: