Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js BackboneJs销毁()_Backbone.js_Slim_Destroy_Notorm - Fatal编程技术网

Backbone.js BackboneJs销毁()

Backbone.js BackboneJs销毁(),backbone.js,slim,destroy,notorm,Backbone.js,Slim,Destroy,Notorm,我有一个简单的BackboneJs应用程序。我使用的是Slim框架和NotORM。 我的问题是,当我添加新的“任务”(视图)时,元素被添加到DOM中,数据被添加到数据库中。但是,在添加视图之后,当我想要单击删除(izbrisi)时,它会立即将其从DOM中删除,而不是从数据库中删除。(未发送删除请求)。刷新页面后,点击删除按钮(izbrisi),一切正常 (function(){ window.App = { Models:{}, Collections:

我有一个简单的BackboneJs应用程序。我使用的是Slim框架和NotORM。 我的问题是,当我添加新的“任务”(视图)时,元素被添加到DOM中,数据被添加到数据库中。但是,在添加视图之后,当我想要单击删除(izbrisi)时,它会立即将其从DOM中删除,而不是从数据库中删除。(未发送删除请求)。刷新页面后,点击删除按钮(izbrisi),一切正常

   (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);

})();
编辑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

您需要替换以下内容:

this.model.on('destroy', this.ukloni, this);
为此:

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

您的“事件”将其从DOM中删除,当主干检测到该事件时,它将运行您的函数“ukloni”

hm…页面上有多少个#izbrisi元素?ID在DOM中必须是唯一的。我想我知道发生了什么。在prepend()方法中,使用view.render().$el.html()而不是.el,然后重试。不,这不是解决方案,但感谢您的帮助删除链接的事件在哪里?听起来好像您在最初添加模型时没有从服务器返回模型的
id
属性。如果在模型上调用
destroy
时没有
id
属性,主干网甚至不会向服务器发送
DELETE
请求。