LINUX.ORG.RU

Backbone.js! Всем биться головой о стенку!

 , , ,


0

1

Есть, популярная на ЛОР'e, связка django-tastypie + backbone.js.

Суть проблемы такова. При попытке удалить объект модели и соответственно объект из БД, получаю тривиальную ошибку - 404 NOT FOUND! Но не пойму почему? Подскажите, люди знающие, где здесь ошибка зарылась?

resources.py

class UserResources(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = "users"
        allowed_methods = ['get', 'post', 'put', 'delete']
        excludes = [
            'email', 'password', 'is_superuser', 'date_joined', 'first_name',
            'is_active', 'is_staff', 'last_login', 'last_name'
        ]
        filtering = {
            'id': ALL,
        }
        authorization = Authorization()
        always_return_data = True



class EntryResource(ModelResource):
    user = fields.ForeignKey(UserResources, 'user', full=True)

    class Meta:
        queryset = Entry.objects.all()
        allowed_methods = ['get', 'post', 'put', 'delete']
        resource_name = 'entries'
        filtering = {
            'id': ALL,
            'user': ALL_WITH_RELATIONS
        }
        authorization = Authorization()
        always_return_data = True

app.js

...

var UserModel = Backbone.Model.extend({
    urlRoot: "/users/"
});

var ProjectModel = Backbone.Model.extend({
    urlRoot: "/entries/"
});

...

var DeleteEntryView = Backbone.View.extend({
    el: "#entry-content",
    events: {
        "click #confirm-delete-entry-btn": "deleteEntry",
        "click #cancel-delete-entry-btn": "cancel"
    },
    template: _.template( $("#delete-entry-template").html() ),

    initialize: function(options) {
        this.entry_id = null;
        this.entry = undefined;

        if (options.entry_id) {
            this.entry_id = options.entry_id;
            this.entry = new EntryModel({id: options.entry_id});
        }
    },
    render: function() {
        // Просто рендерим шаблон удаления записи
    },
    deleteEntry: function() {
        this.entry.destroy({
            wait: true,
            success: function() {
                console.log("SUCCESSFUL!");
                router.navigate("entries", {trigger: true});
            },
            error: function() {
                console.log("ERROR!");
            }
        });
        return false;
    },
    cancel: function() {
        router.navigate("entries", {trigger: true});
        return false;
    }
});

URL'ы ресурса и модели один в один совпадают. Объект this.entry имеется (со всеми свойствами, что нужно). Но при выполнении метода destroy() сервер возвращает ошибку - 404 NOT FOUND! На что тестипай ругается?


django-tastypie + backbone.js

Советую не связываться с этой связкой, этo боль и ад.

Лучше django rest framework + angular.

holuiitipun ()

Есть, популярная на ЛОР'e, связка django-tastypie + backbone.js.

В какой-то параллельной вселенной, но не на ЛОРе, ага.

abc ()
Ответ на: комментарий от abc

Судя по первым двум каментам - «негативно-популярная» (==«популярная»))

slackwarrior ★★★★★ ()
Ответ на: комментарий от holuiitipun

этo боль и ад

Можешь поподробнее про боль?

eth1 ()

Простую диагностику отменили? Берёшь и ручками дергаешь за рест из браузера, если все работает, то смотришь что там апп.жс дергает.

Deleted ()
Ответ на: комментарий от Deleted

Чуть продвинулся в решении проблемы.

Почему-то, при выполнеии destroy(), backbone стучится не на http://localhost:8000/api/v1/entries/x, а на http://localhost:8000/api/v1/api/v1/entries/x!

Почему дублируется часть url - /api/v1/? Отсюда сервер и шлет 404, ибо нет такого url(!

djnoob ()

Разобрался)! Дело было в функции ajaxPrefilter().

djnoob ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.