Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Di bagian ini, Anda akan menambahkan kemampuan bagi pengguna untuk membuat buku baru. Di app.js, tambahkan kode berikut ke model tampilan:
self.authors = ko.observableArray();
self.newBook = {
Author: ko.observable(),
Genre: ko.observable(),
Price: ko.observable(),
Title: ko.observable(),
Year: ko.observable()
}
var authorsUri = '/api/authors/';
function getAuthors() {
ajaxHelper(authorsUri, 'GET').done(function (data) {
self.authors(data);
});
}
self.addBook = function (formElement) {
var book = {
AuthorId: self.newBook.Author().Id,
Genre: self.newBook.Genre(),
Price: self.newBook.Price(),
Title: self.newBook.Title(),
Year: self.newBook.Year()
};
ajaxHelper(booksUri, 'POST', book).done(function (item) {
self.books.push(item);
});
}
getAuthors();
Di Index.cshtml, ganti markup berikut:
<div class="col-md-4">
<!-- TODO: Add new book -->
</div>
Dengan:
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Add Book</h2>
</div>
<div class="panel-body">
<form class="form-horizontal" data-bind="submit: addBook">
<div class="form-group">
<label for="inputAuthor" class="col-sm-2 control-label">Author</label>
<div class="col-sm-10">
<select data-bind="options:authors, optionsText: 'Name', value: newBook.Author"></select>
</div>
</div>
<div class="form-group" data-bind="with: newBook">
<label for="inputTitle" class="col-sm-2 control-label">Title</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputTitle" data-bind="value:Title"/>
</div>
<label for="inputYear" class="col-sm-2 control-label">Year</label>
<div class="col-sm-10">
<input type="number" class="form-control" id="inputYear" data-bind="value:Year"/>
</div>
<label for="inputGenre" class="col-sm-2 control-label">Genre</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputGenre" data-bind="value:Genre"/>
</div>
<label for="inputPrice" class="col-sm-2 control-label">Price</label>
<div class="col-sm-10">
<input type="number" step="any" class="form-control" id="inputPrice" data-bind="value:Price"/>
</div>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
</div>
</div>
Markup ini membuat formulir untuk mengirimkan penulis baru. Nilai untuk daftar drop-down penulis terikat dengan data yang authors dapat diamati dalam model tampilan. Untuk input formulir lainnya, nilai terikat data ke newBook properti model tampilan.
Handler pengiriman pada formulir terikat ke addBook fungsi:
<form class="form-horizontal" data-bind="submit: addBook">
Fungsi ini addBook membaca nilai input formulir terikat data saat ini untuk membuat objek JSON. Kemudian POST objek JSON ke /api/books.