2012-02-16 7 views
3

У меня очень простой базовый модель и коллекция. У меня есть соответствующий backbone.marionette.CollectionView и backbone.marionette.ItemView, и они живут в backbone.marionette.region.Backbone.Marionette model.destroy issue

В элементе ItemView содержится кнопка "удалить". Событие нажатия кнопки удаления вызывает модель.destroy(). HTTP-DELETE выдается на бэкэнд, но, похоже, он выдается дважды, и поскольку во второй раз он терпит неудачу, элемент не удаляется из коллекции.

Все остальное работает нормально, только HTTP DELETE выдается дважды. Любая идея почему?

Я использую Backbone.Marionette версия v0.4.5

# Model: 
class User extends Backbone.Model 
    idAttribute: "_id" 

# Collection 
class Users extends Backbone.Collection 
    model: app.User 
    url: "/someUrl/Users" 

# CollectionView 
class UserListView extends Backbone.Marionette.CollectionView 
    tagName: "ul", 
    itemView: app.UserItemView 

# ItemView 
class UserItemView extends Backbone.Marionette.ItemView 
    template: "#item" 
    tagName: "li" 

    events: 
    "click .edit": "edit" 
    "click .remove": "remove" 

    remove: -> 
    @model.destroy() 

    edit: (e) -> 
    alert JSON.stringify @model 
+0

mhmm .... это действительно seemas то связанное с некоторыми встроенными в случае или метода. Попробуйте использовать нестандартные имена для событий и методов. Например, вы могли бы попытаться переименовать метод remove в 'myRename' (удалить предопределенный метод магистрали в представлениях и коллекциях) –

+0

Daniele, вы абсолютно правы. Я на самом деле уже разработал решение (см. Мою конверсию с Derick Bailey по адресу https://github.com/derickbailey/backbone.marionette/issues/25). Но если вы хотите опубликовать свой предыдущий комментарий в качестве ответа, я с радостью отметю его как правильное, чтобы вы получили кредит. Еще раз спасибо. –

+0

ОК, я рад, что мы решаем решение. Ответ следует в сообщении. спасибо –

ответ

5

mhmm .... это действительно кажется, что-то связано с некоторыми встроенными в случае или метода.

Попробуйте использовать нестандартные имена для событий и методов.

Например, вы можете попробовать переименовать метод remove в 'myRename' (удалить предопределенный метод магистрали в представлениях и коллекциях).

так:

# ItemView 
class UserItemView extends Backbone.Marionette.ItemView 
    template: "#item" 
    tagName: "li" 

    events: 
    "click .edit": "edit" 
    "click .remove": "myRemove" 

    myRemove: -> 
    @model.destroy() 

    edit: (e) -> 
    alert JSON.stringify @model 

надеюсь, что это помогает

+3

FWIW: эта проблема теперь задокументирована в списке проблем марионетки, с полным объяснением, почему вызвал этот метод «удалить»: https://github.com/derickbailey/backbone.marionette/issues/25 –

+0

.. . Поскольку репо для Marionette переместилось, так и проблема, с которой связан Derick; теперь он находится на странице https://github.com/marionettejs/backbone.marionette/issues/25 – alxndr