2014-05-23 23 views
0

我是BackboneJs的新手。我真的不知道自己做錯了什麼,但是我的子視圖中發生的事件並沒有發生。我一直堅持這個問題很長一段時間,我用谷歌和stackoverflow找到解決我的問題,但我仍然困惑。有人可以幫助\引導我嗎?子視圖中的Backbone.Js事件不會觸發

var ExerciseList = Backbone.Collection.extend(); 
var ExerciseView = Backbone.View.extend({ 

    events : { 
     'click' : "clickFun" 
    }, 

    clickFun : function(e) { 
     alert("yamaha"); 
    }, 

    render : function() { 
     var exerciseList = new ExerciseList(); 
     exerciseList.url = '/api/exercise_bank/' + this.id + '/'; 
     var that = this; 
     var element = this.$el; 
     exerciseList.fetch({ 
      success : function() { 
       var template = _.template($('#exercise-bank-template-exercises').html(), {exercises : exerciseList.models}); 
       $(element).html(template); 
      } 
     }); 
     return this; 
    }, 
}); 

// Collection 
var MuscleGroupList = Backbone.Collection.extend({ 
    url : '/api/exercise_bank/' 
}); 

// View 
var MuscleGroupView = Backbone.View.extend({ 
    el : '#exercise-bank-component', 

    initialize : function() { 
     this.exerciseList = new ExerciseList(); 
     this.exerciseView = new ExerciseView(); 
    }, 

    render : function() { 
     var muscleGroupList = new MuscleGroupList(); 
     that = this; 

     console.log('MuscleGroup.render'); 

     muscleGroupList.fetch({ 
      success : function(muscleGroupList) { 
       template = _.template($('#exercise-bank-template-musclegroups').html(), { 
        musclegroups : muscleGroupList.models 
       }); 
       that.$el.html(template); 

       _.each(muscleGroupList.models, function(musclegroup) { 
        var element = "#eb-exercises-" + musclegroup.get('id'); 

        that.exerciseList.id = musclegroup.get('id'); 
        that.exerciseView.id = musclegroup.get('id'); 

        that.exerciseView.setElement(element).render(); 
        return that; 
       }); 
      } 
     }); 
     return this; 
    }, 
}); 

muscleGroupView = new MuscleGroupView(); 
exerciseView = new ExerciseView(); 

muscleGroupView.render(); 

Backbone.history.start(); 
+0

那麼最新的問題?什麼事件沒有解僱? – Evgeniy

+0

這是子視圖(ExerciseView)中沒有觸發的「clickFun」。 – Hammoud

回答

-1

解決它!

我只是感動:

initialize : function() { 
     this.exerciseList = new ExerciseList(); 
     this.exerciseView = new ExerciseView(); 
    }, 

到:

_.each(muscleGroupList.models, function(musclegroup) { 
    var element = "#eb-exercises-" + musclegroup.get('id'); 
    var exerciseList = new ExerciseList(); 
    var exerciseView = new ExerciseView(); 

    exerciseList.id = musclegroup.get('id'); 

    exerciseView.setElement(element).render(); 
    return that; 
    }); 

和現在的作品,因爲我想要它做的! :)

0

問題:

1)您的觀點得到呈現了DOM。

2)這是真元的DOM var element = "#eb-exercises-" + musclegroup.get('id');

3內部存在)爲什麼需要這裏的setElement

that.exerciseView.setElement(element).render(); 
+0

1和2:嗯,我這麼認爲?我能以某種方式驗證它嗎?我的模板被渲染。 3:因爲我需要將元素的id設置爲我想讓數據呈現的exerciseView,我是否做錯了?我是一個全新的骨幹。 – Hammoud

+0

你可以通過執行$(「#eb-exercises - 」+ musclegroup.get('id'));如果這返回一個空數組,那麼就出錯了 – Kushal

+0

當我只寫$(「#eb-exercises-什麼都沒有顯示出來,但是當我寫console.log($(「#eb-Exercises-」+ musclegroup.get('id')));我收回數據。 – Hammoud