Коллекция магистралей Knockback.js добавляет в интерфейс только первый элемент
Я пытаюсь создать что-то новое с помощью Knockback.js, и сейчас я сталкиваюсь с проблемой интеграции с нокаутом и отбрасыванием. Проблема в том, что я успешно написал обработчик событий, который добавляет новую модель в коллекцию Objectives, но пользовательский интерфейс только регистрирует и добавляет первое такое дополнение. Он успешно добавляет новую цель в список, но только первую - после этого, в то время как коллекция успешно добавляет новую модель в список, она не отображается в пользовательском интерфейсе.
<a class="btn" id="click">Click me!</a>
<div id="objectives" data-bind="foreach: objectives">
<h3 data-bind="text: name"></h3>
</div>
И этот скрипт:
// Knockback script MUST be located at bottom of the page
$(document).ready(new function() {
// instantiate the router and start listening for URL changes
var page_router = new PageRouter();
Backbone.history.start();
// Get JSON value
var objectives;
$.getJSON('json.php', {table: 'objectives'}).done(function(data) {
objectives = new ObjectiveCollection(data);
var view_model = {
objectives: kb.collectionObservable(objectives, {view_model: kb.ViewModel})
};
ko.applyBindings(view_model, $('#objectives').get(0));
});
$('#click').click(function() {
var objective_model = new Objective({category: 3, name: Math.random(), descriptor: 'What up'});
objectives.add(objective_model);
console.log(objectives);
});
});
Где только пользовательские модели, как видно здесь:
/**
* Objectives model
*/
var Objective = Backbone.Model.extend({
// Defaults
defaults: {
id: null,
category: null,
weight: null,
name: null,
descriptor: null
},
// Url to pass to
url : function() {
// Important! It's got to know where to send its REST calls.
// In this case, POST to '/donuts' and PUT to '/donuts/:id'
return this.id ? '/objectives/' + this.id : '/objectives';
}
});
/**
* Basic objectives collection
*/
var ObjectiveCollection = Backbone.Collection.extend({
model: Objective,
initialize: function(models,options) {}
});
1 ответ
Оказывается, проблема была расположена здесь:
var Objective = Backbone.Model.extend({
// Defaults
defaults: {
id: null,
category: null,
weight: null,
name: null,
descriptor: null
}
Он продолжал генерировать модели с нулевым идентификатором, и программа будет отображать только объекты с уникальным идентификатором. Поскольку идентификатор по умолчанию равен нулю, он будет считать два объекта без определенных идентификаторов одинаковыми. Стирая идентификатор: ноль; линия, эта проблема перестала быть проблемой.