Javascript — Создать в Backbone.JS не обновляет идентификатор

В настоящее время я работаю над приложением списка задач Backbone.js. Я создаю интерфейс с помощью Backbone, и я создаю свой интерфейс с помощью PHP и MySQL.

Мне удалось создать функцию сохранения и удаления, но в настоящее время у меня возникла одна проблема: когда я сохраняю модель, модель не имеет идентификатора и получает Backbone временный идентификатор. Затем, когда я сохраняю модель, получает идентификатор, назначенный сервером, и сервер возвращает новую модель.

Это моя модель и код коллекции:

app.TodoModel = Backbone.Model.extend({
idAttribute: "ID",
defaults: {
"title": "Do me!",
"date": "24-06-1992",
"completed": false
}
});

app.TodoCollection = Backbone.Collection.extend({
model: app.TodoModel,
url: '/src/todos.php'
});

И это код, который я использую для создания модели:

app.AppView = Backbone.View.extend({
el: '#todoApp',
initialize: function(){
this.input = this.$('#addTodo');
this.todoCollection = new app.TodoCollection(); // Create collection

this.todoCollection.on('reset', this.addAll, this);
this.todoCollection.on('add', this.addOne, this);

this.todoCollection.fetch();
},
events: {
'keypress #addTodo': 'createTodo'
},
addOne: function(todo){
var view = new app.TodoView({model: todo});
$('#todoList').append(view.render().el);
},
addAll: function(){
console.log('reset');
this.$('#todoList').html(''); // clean the todo list
this.todoCollection.each(this.addOne, this);
},
createTodo: function(e){
if (e.which !== 13 || !this.input.val().trim()) { // ENTER_KEY = 13
return;
}
this.todoCollection.create(this.newAttributes(), {
wait:true,
success: function(model, response) {
console.log("Added todo");
console.log(response);
},
error: function(model, response) {
console.log("Adding failed");
console.log(response);
}
}),
this.input.val(''); // clean input box
},
newAttributes: function(){
return {
title: this.input.val().trim(),
date: new Date(),
completed: false
}
}
});

Пока все хорошо, верно? Но теперь проблемы начинаются. Даже когда я использую wait: true при создании используются старые данные модели. Таким образом, идентификатор не обновляется с новым идентификатором, что означает, что я не могу вызвать функцию удаления, потому что для этого требуется действительный идентификатор.

Также дата отображается по-разному, это дата, когда вы впервые добавляете задачу: MON OCT 26 2015 08:59:22 GMT+0100 (CET) и это дата, когда вы обновляете страницу: 2015-10-26, Это, вероятно, также связано с использованием данных старой модели.

Мое приложение размещено здесь: http://todoapp.lusenet.com/

TL; DR: модель создается и сохраняется на сервере, но внешний интерфейс не использует возвращенную модель и вместо этого использует старую модель. Как я могу использовать возвращенные данные моделей?

Благодарю.

2

Решение

Я понял это, проблема была в том, что я вернулся с сервера. Это код, который я использовал:

$addTodoQuery = "INSERT INTO todos (title,date,completed) VALUES ('$title','$date','$completed')";
if(mysqli_query($con,$addTodoQuery)){
$ID = mysqli_insert_id($con);
$getTodoQuery = "SELECT * FROM todos WHERE ID='$ID'";
$todos = mysqli_query($con,$getTodoQuery) or die("error"); // http://us3.php.net/manual/en/mysqli.query.php
while ($todo = mysqli_fetch_assoc($todos)) {
$rows[] = $todo;
}
print_r(json_encode($rows));
} else {
echo "Fail";
}

Таким образом, это напечатало массив, содержащий один объект, в то время как Backbone ожидал только объект. Итак, я изменился print_r(json_encode($rows)) в echo json_encode($rows[0]); и теперь все работает отлично!

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector