Итак, моя проблема в следующем.

Использование магистрали для сохранения чего-либо в базе данных MYSQL.

Когда я вызываю this.model.save (), у меня возникает очень странная проблема.

Модель сохранит ответ JSON как объект и не будет вместо этого обновлять новые значения.

Мои атрибуты в инструментах разработки будут выглядеть примерно так.

Атрибуты: Объект

0: Object

ID: "4"

Name: "TEST"

Title: "MEOW"

Stuff: "1"

When: "2013-02-14 22:17:14"

0 не должно быть. Я подтвердил, что объект json действителен, поэтому знаю, что проблема не в этом.

0
Lordphartmore 21 Фев 2013 в 02:48

1 ответ

Лучший ответ

Похоже, ваш ответ JSON на самом деле является массивом с одним элементом, а не объектом.

Свойство 0 создается, когда Backbone вызывает model.set(response), который, в свою очередь, копирует все ключи объекта ответа в хэш атрибутов. Если массив передается в set, вот что происходит.

Вы должны исправить свой сервер, чтобы он отвечал необработанным объектом ({...}) вместо массива ([{...}]). Если вы не можете изменить поведение сервера, вы можете переопределить Model.parse, чтобы развернуть ответ на клиенте:

var Model = Backbone.Model.extend({
  parse: function(response) {
    return _.isArray(response) ? response[0] : response;
  }
});
1
jevakallio 21 Фев 2013 в 03:01
Спасибо за быстрый ответ. Ваше решение отлично работало на стороне сервера. Однако не пробовал код магистрали.
 – 
Lordphartmore
21 Фев 2013 в 03:29