0

私のバックボーン関数は、条件付きのメソッド、すでにオブジェクト内にある関数を、eventsユーザークリックによる宣言でトリガーすることを想定しています。これは正常に機能します。しかし、条件によって、私のクリックイベントはまったくトリガーされません。

これが私のコードです:

ビューの部分で:

            events:{
                        "click .mainMenu a":"listTrigger" // this is work on user click
                    },
        initialize:function(params){
                    _.bindAll(this);
                    var that = this;
                    this.listItems = ["projectName","assignedTo","projectName"];
                    this.classItems = ["projectName","assignedTo","sortBy"];
                    this.listCatch = [];this.boardCatch=[];
                    this.params = params,
                    this.filterState = false,
                    this.listTriggerElement = "";//i am initiating a element variable

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

                    this.collection = new singleton.collection;
        //          this.collection.on('reset', this.render);   
                    this.collection.on('add', this.render); 
                    this.collection.on('remove', this.render);  
                    var dataFetcher = function(){
                        that.collection.fetch({update:true,remove:true});
                        appDataFetcher = setTimeout(dataFetcher,10000);
                    };
                    var appDataFetcher = setTimeout(dataFetcher,0); 
                },
render:function(){
            this.listCollection     = this.collection;
            this.boardCollection    = this.collection;
            this.filterCollection   = this.collection;
            this.listCollect();
this.filterState != true ? this.boardViewSet() : this.listTriggerElement.trigger('click'); 
// checking by condition and triggering click.. not working
            },

    listTrigger:function(e){    //it should work by user click as well data udpate..    
                e.preventDefault();
                this.listTriggerElement = $(e.target);
                var filterKey = $(e.target).text();
                var category = $(e.target).parents('ul').prop('class');

                var collect = _.filter(this.filterCollection.models, function(model){
                    return model.get(category) === filterKey;
                });

                var newColl = new singleton.collection();
                newColl.reset(collect);

                this.boardCollection = newColl;
                this.boardViewSet();
                this.filterState = true;
            }

どうすればこの問題を修正できますか..?

4

1 に答える 1

2

「.mainMenua」要素はこのビューの範囲内にありますか?

そうでない場合は、「el」オブジェクトを親コンテナに設定する必要があります。例:

http://jsfiddle.net/C9wew/4347/

 myView = Backbone.View.extend({
     el: "#container",
    render: function(){
    },
    events: {
        "click button": "doSomething"  
    },
    doSomething: function( event ){
        console.log(345345);
    }
});

new myView();

一方、「スコープ」(el)を定義しなかった場合、それは機能しません。

于 2013-02-15T10:40:38.117 に答える