0

私は10秒ごとにサーバーからデータをフェッチしています。これでは、3種類のデータを取得しています。

タイムアウト呼び出しの後、既存のデータを削除しています。コンソールに配列がクリアされたことが表示されますが、要素は引き続き追加されます。

DOMの両方の要素をクリアし、バインドを解除するにはどうすればよいですか。

私のclose関数は呼び出され続けますが、要素はDOMから削除されません。

私の単一のビュー:

singleton.view = Backbone.View.extend({
    tagName     :'article',
    template0   : function(value){
                    var label = value === 0 ? "projectName" : value === 1  ? "assignedTo" :"projectName";
                    return _.template("<a href='#'><%= "+label+" %></a>");
                },
    template1   : _.template($('#boardTemplate').html()),
    initialize  :function(prams){
        this.template = this['template'+0](prams.subTempNo);
    },
    close:function(){
        console.log('clean up') // i am getting consoled
        this.unbind();// i am unbinding
        this.remove();// i am removing
    },
    render:function(){
        var temp = this.template;
        this.$el.html(temp(this.model.toJSON()));
        return this;
    }
}); 
return singleton.view;

ビューで:

listViewAppender:function(item,i){
            var listElement = new singleton.view({model:item,tempNo:0,subTempNo:i,tagName:'li'});
            listElement.close(); // whenever i call the new instance i am removing old stuff..
            this.$el.find('.'+this.classItems[i]).append(listElement.render().el);
        },

どうすればこの問題を修正できますか..正しいアプローチのペラーゼ..

4

2 に答える 2

0

ちょっとやり直してください.....それをテストする必要があります。何が起こったのかコメントしてください。以下のコードを修正します。

やってみませんか

listViewSet:function(key,i){
    var l = this.listCatch.length;
    if(l > 0){
        for (var i = 0; i < l; i++) {
            console.log(this.listCatch[i]);
            this.listCatch[i].remove();
         }
    }

    this.listCatch = [];

    _.each(this.listCollection.models, function(model){
        that.listViewAppender(model,i); //setting agian.
    });
},

listViewAppender:function(item,i){
    var listElement = new singleton.view({model:item,tempNo:0,subTempNo:i,tagName:'li'});
    console.log(listElement);
    this.$el.find('.'+this.classItems[i]).append(listElement.render().el);
    this.listCatch[i] = listElement;
},
于 2013-02-07T12:03:05.000 に答える
0

私は自分の機能を調べましたが、this.listCatch[i] = listElement;間違って宣言された行に問題があります。

後で手動で配列を宣言しましたが、正常に動作します。私の初期化では、3つのアレイを導入しましたが、今必要なものは正常に機能します。

this.listCatch = [];


            for(var i=0;i<this.listItems.length; i+=1){
                this.listCatch[i] = [];
            }

そのため、モデルをアレイにプッシュする前に、導入されたアレイが問題を解決しました。

于 2013-02-08T05:55:47.877 に答える