События Backbone.Js из подпредставления не запускаются

Я новичок в BackboneJs. И я действительно не знаю, что, черт возьми, я делаю неправильно, но события из моего подпредставления не запускаются. Я застрял с этой проблемой уже давно, и я использовал google и stackru, чтобы найти решение своей проблемы, но я все еще в замешательстве. Может ли кто-нибудь помочь \ направить меня?

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

2 ответа

Решение

Решил это!

Я только что переехал:

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

и теперь это работает так, как я хочу!:)

Вопросы:

1) Ваш взгляд отображается на Dom.

2) Действительно ли этот элемент присутствует внутри дома? var element = "#eb-exercises-" + musclegroup.get('id');

3) Зачем здесь нужен setElement

that.exerciseView.setElement(element).render();
Другие вопросы по тегам