Почему моя база данных js не загружает правильный список данных? - PullRequest
0 голосов
/ 24 января 2020

Вот мое определение модели и коллекции:

let PhotoModel = Backbone.Model.extend({
    urlRoot: '/api/Photo',
    defaults: {
        id: "2",
        import_id: "1",
        original_filename: "",
        filename: "IMG_8199 - Version 2.jpg",
        aws_url: "https://s3.amazonaws.com/nakamoto.ca",
        aws_bucket: "nakamoto.ca",
        aws_s3_source_path: "source/2016/02/IMG_8199_-_Version_2.jpg",
        aws_s3_compressed_path: "compressed/2016/02/IMG_8199_-_Version_2.jpg_1600x1200",
        aws_s3_thumb_path: "thumb/2016/02/IMG_8199_-_Version_2.jpg_400x400",
        capture_date: "2016-02-27 18:45:02",
        upload_date: "2017-04-18 21:26:59",
        file_size: "2026722",
        width: "3264",
        length: "2448",
        camera_make: "Apple",
        camera_model: "iPhone 6 Plus",
        software: "Aperture 3.6",
        latitude: "45.225206",
        lat_ref: "N",
        longitude: "45.292572",
        lon_ref: "W",
        altitude: "0.000000",
        apple_note: "iPhone 6 Plus back camera 4.15mm f/2.2",
        iptc_headline: "",
        iptc_caption: "",
        iptc_credit: "",
        iptc_rating: "0",
        iptc_city: "",
        iptc_province_state: "",
        iptc_country: "",
        iptc_tags: "",
        favorite: "0",
        checksum: "4749e94d3eec7b6bf6a0136d8dc3457c",
        public_flag: "0",
        raw_exif: ""
    },

    parse: function(response_data) {
        return response_data.data;
    }
});

let PhotoCollection = Backbone.Collection.extend({
    url: '/api/Photo',
    model: PhotoModel,

    parse: function(response_data) {
        return response_data.data;
    }
});

, а вот вывод вызова / api / Photo (копия и вставка из Chrome инспектора):

{model: null, id: null, request: "GET", status: 1,…}
model: null
id: null
request: "GET"
status: 1
message: "grabbed some records with: SELECT * FROM `photo` WHERE 1 LIMIT 1, 10"
count: 10
page: 1
per_page: 10
data: [{id: "2", import_id: "1", original_filename: "", filename: "IMG_8199 - Version 2.jpg",…},…]
0: {id: "2", import_id: "1", original_filename: "", filename: "IMG_8199 - Version 2.jpg",…}
1: {id: "3", import_id: "1", original_filename: "", filename: "IMG_8192 - Version 2.jpg",…}
2: {id: "4", import_id: "1", original_filename: "", filename: "IMG_7961 - Version 2.jpg",…}
3: {id: "5", import_id: "1", original_filename: "", filename: "IMG_8086 - Version 2.jpg",…}
4: {id: "6", import_id: "1", original_filename: "", filename: "IMG_7947 - Version 2.jpg",…}
5: {id: "7", import_id: "1", original_filename: "", filename: "IMG_8113 - Version 2.jpg",…}
6: {id: "8", import_id: "1", original_filename: "", filename: "IMG_8009 - Version 2.jpg",…}
7: {id: "9", import_id: "1", original_filename: "", filename: "IMG_8109 - Version 2.jpg",…}
8: {id: "10", import_id: "1", original_filename: "", filename: "IMG_7967 - Version 2.jpg",…}
9: {id: "11", import_id: "1", original_filename: "", filename: "IMG_8004.jpg",…}

и вот мой тестовый код:

    $(function() {
        var photo_album = new PhotoCollection();
        photo_album.fetch({
            success: function (photo_album, response) {
                photo_album.each(function(photo, index, all) {
                    console.log(photo.get('filename'));
                });
            }
        );}
    };

Когда я смотрю в консоль, я вижу одно и то же имя файла, повторенное 10 раз, и это имя по умолчанию из моей модели Photo (IMG_8199 - Version 2.jpg) , Я ожидаю увидеть 10 разных имен файлов в соответствии с данными, возвращаемыми / api / Photo (выше).

Может кто-нибудь сказать мне, где я иду не так? Я чувствую, что это должно быть что-то действительно очевидное - это моя первая попытка магистрали. js.

Если я регистрирую response_data.data в методе Parse коллекции, я вижу правильный массив данных из json данные.

Кстати, я могу без проблем загружать отдельные модели фотографий.

Любая помощь будет принята с благодарностью, спасибо!

1 Ответ

1 голос
/ 24 января 2020

Из журнала изменений 0.9.9

После извлечения модели или коллекции теперь будут выполняться все определенные функции анализа. Таким образом, выбор коллекции и возврат новых моделей может привести к тому, что как коллекция будет проанализирована, так и каждая модель будет проанализирована по очереди, если определены обе функции.

Скорее всего, ваша индивидуальная модель извлечение успешно выполняется из-за правильной структуры ответа от сервера, но ответ извлечения коллекции, переданный в parse модели, является просто объектом, подобным этому:

{id: "3", import_id: "1", original_filename: "", filename: "IMG_8192 - Version 2.jpg",…}

, который не имеет Свойство data, поэтому

parse: function(response_data) {
    return response_data.data;
}

в модели вернет undefined, оставив значения по умолчанию во вновь созданной модели. Вы должны обновить синтаксический анализ модели, чтобы позаботиться об обоих случаях

...