2013-11-22 5 views
0

У меня есть это простое приложение BackboneJs. Я использую Slim Framework и NotORM. Моя проблема заключается в том, что при добавлении новой «задачи» (вид) элементы добавляются в DOM, а данные добавляются в базу данных. Но сразу после добавления View, когда я хочу нажать remove (izbrisi), он удаляет его из DOM, но не из базы данных. (NO DELETE REQUEST - SEND). После обновления страницы и нажатия кнопки удаления (izbrisi) все работает.BackboneJs destroy()

(function(){ 

    window.App = { 
     Models:{}, 
     Collections: {}, 
     Views : {} 
    } 

    window.template = function(id) { 
    return _.template(jQuery('#' + id).html()); 
    } 


    App.Models.Parti = Backbone.Model.extend({ 

       defaults: { 


       }, 

       initialize:function() 
       { 

       }, 

       urlRoot: 'http://localhost/BackboneJS/vjezba6/server/index.php/task' 

    }); 

    App.Collections.Partiji = Backbone.Collection.extend({ 

     model: App.Models.Parti, 
     url: 'http://localhost/BackboneJS/vjezba6/server/index.php/task', 

    }); 

    App.Views.Parti = Backbone.View.extend({ 

     tagName :"div", 
     className: "box shadow aktivan", 

     template: template("boxovi"), 

     initialize: function() { 
     //this.model.on('change', this.render, this); 
     this.model.on('destroy', this.ukloni, this); 


     }, 

     events: { 
     'click #izbrisi': 'izbrisiItem', 
     }, 

     izbrisiItem: function() 
     { 
      this.model.destroy(); 

     }, 

     ukloni:function() 
     { 
      this.$el.remove(); 
      console.log("frag"); 

     }, 

     render: function() { 
      var template = this.template(this.model.toJSON()); 

      this.$el.html(template); 

      return this; 
     } 
    }); 

    App.Views.Partiji = Backbone.View.extend({ 

     tagName:"div", 
     id: "nosac-boxova", 

     initialize: function() { 
      this.collection.on('add', this.dodajPartyView, this); 

      }, 

     render: function() { 
     this.collection.each(this.dodajPartyView, this); 

     return this; 
     }, 

     dodajPartyView: function(party) { 
     var partyView = new App.Views.Parti({ model: party }); 

     this.$el.append(partyView.render().el); 
     } 

    }); 

    App.Views.Dodaj = Backbone.View.extend({ 

     tagName: "div", 
     id: "dodajParty", 
     template: template("dodajTemp"), 
     events:{ 
      "submit": "submit" 
     }, 

     submit: function(e) 
     { 
       e.preventDefault(); 

       var inpNaziv = $(e.currentTarget).find('.naziv').val(); 
       //var inpLokal = $(e.currentTarget).find('.lokal').val(); 
       //var inpDatum = $(e.currentTarget).find('.datum').val(); 
       var inpOpis = $(e.currentTarget).find('.opis').val(); 



       var party = new App.Models.Parti 
       ({ 
        naziv: inpNaziv, 
        //lokal : inpLokal, 
        //datum : inpDatum, 
        tekst: inpOpis 

       }); 

       // this.collection.add(party); 
       this.collection.create(party); 


     }, 

     render: function() { 
     var template = this.template(); 

     this.$el.html(template); 

     return this; 
     } 



    }); 



var kolekcijaPartija = new App.Collections.Partiji; 
kolekcijaPartija.fetch(); 

var dodajView = new App.Views.Dodaj({collection:kolekcijaPartija}); 
$("div#sidebar-right").prepend(dodajView.render().el); 

var partijiView = new App.Views.Partiji({collection: kolekcijaPartija}); 
$("div#content").prepend(partijiView.render().el); 

})(); 

EDIT 1

App.Views.Partiji = Backbone.View.extend({ 

     tagName:"div", 
     id: "nosac-boxova", 

     initialize: function() { 

      //this.collection.on('add', this.dodajParty, this); 
      //this.collection.on('reset', this.dodajPartyView, this); 

      }, 

     render: function() { 
     //this.collection.each(this.dodajParty, this); 
      console.log(this.collection.length); 

     //return this; 
     }, 

     dodajParty: function(party) { 
      var partyView = new App.Views.Parti({ model: party }); 

      this.$el.append(partyView.render().el); 

     } 


    }); 

ВОЗВРАТ 0

+1

гм ... сколько #izbrisi элемента у вас на странице? ID должен быть уникальным в DOM. –

+1

Думаю, я знаю, что происходит. в методах prepend() используйте view.render(). $ el.html() вместо просто .el и повторите попытку. –

+0

Нет, это не решение, но спасибо за вашу помощь – Sysrq147

ответ

0

Вы должны заменить это:

this.model.on('destroy', this.ukloni, this); 

с этим:

this.model.on('remove', this.ukloni, this); 

ваших «событий» удаляет его из DOM, когда магистральные обнаружить, что событие будет запускать функцию Ур «ukloni»

Смежные вопросы