books라는 배열의 항목 목록이있는이 테이블이 있습니다. 즉 HTML에서 Backbone.js 컬렉션의 크기를 동적으로 변경하십시오.
var books = [
{"title": "Harry Potter 1", "author": "J. K. Rowling"},
{"title": "Harry Potter 2", "author": "J. K. Rowling"}
//.... More books
]
나는 한 권의 책 행 테이블로 렌더링됩니다 전체 도서 목록, 또한 선택 형태의 뷰에 대한 뷰에 내 의견을 분리.
var Book = Backbone.Model.extend({});
var BooksCollection = Backbone.Collection.extend({
model: Book
});
var Books = new BooksCollection(books);
//
var SelectView = Backbone.View.extend({
el: ".container",
events: {
"change #num-entries": "updateBookList"
},
initialize: function() {
this.render();
},
render: function() {
this.collection.models.length = $('#num-entries').val();
},
updateBookList: function() {
this.collection.models.length = $('#num-entries').val();
//console.log(this.collections.models.length);
booksview.$el.empty();
booksview.unbind();
booksview.render();
}
});
var selectView = new SelectView({
model: Book,
collection: Books
});
//
var BooksView = Backbone.View.extend({
type: "BooksView",
el: "#books-table",
initialize: function() {
//this.collection.models.length = $('#num-entries').val();
this.render();
},
render: function() {
this.collection.each(function(book) {
var bookView = new BookView({
model: book
});
bookView.render();
this.$el.append(bookView.$el);
}, this)
}
});
var BookView = Backbone.View.extend({
type: "BookView",
className: 'book',
tagName: 'tr',
template: _.template($("#books-template").html()),
events: {
"click .delete": "bookRemove"
},
initialize: function() {
this.render();
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
},
bookRemove: function(book) {
this.remove();
this.model.trigger('destroy', this.model);
//Books.remove(book);
},
});
var booksview = new BooksView({
collection: Books
})
이 내 HTML에
<div class="container">
<div class="form-group" id="entries-per-page">
<label>Number of Entries:</label>
<select class="form-control" id="num-entries">
<option value="10">Show 10 entries</option>
<option value="25" selected>Show 25 entries</option>
<option value="50">Show 50 entries</option>
<option value="100">Show 100 entries</option>
</select>
</div>
<table class="table table-bordered table-hover">
<thead>
<tr class="header-names">
<th class="book-category">Title</th>
<th class="book-category">Author</th>
<th class="book-category">Meta Data</th>
<th class="book-category">Options</th>
</tr>
</thead>
<tbody id="books-table">
<script type="text/template" id="books-template">
<td><%- title %></td>
<td><%- author %></td>
<td><span class='glyphicon glyphicon-remove delete'></span></td>
</script>
</tbody>
</table>
</div>
현재 목록을 수집 수축을 할 수있는 선택보기 내 지저분한 코드가 (나의 표는 예를 들어 10 25 개 항목에서 이동)하지만 난 경우 테이블에 더 많은 책을 표시하려고합니다. 오류가 발생합니다. Uncaught TypeError : 정의되지 않은 'toJSON'속성을 읽을 수 없습니다. 내가 collection.slice 함수를 사용하여 도움이 될 것 같아요,하지만 그것을 알아낼 수 없습니다. 또한 내 도서 삭제 기능을 사용하여이 작업을 수행하는 것은 어렵습니다. 슬라이스 방식을 사용하여 책 배열이나 책 모음의 크기를 동적으로 변경하여 테이블이 올바르게 표시되도록 도움을받을 수 있습니까?