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

0

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

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
    так в чем проблема ? какое событие не стреляет?
  • 0
    Это "clickFun" в подпредставлении (ExerciseView), который не запускается.
Теги:
backbone.js
subviews

2 ответа

-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: потому что мне нужно установить идентификатор элемента в exercView, где я хочу, чтобы данные отображались, я делаю это неправильно? Я абсолютный новичок в позвоночнике.
  • 0
    Вы можете проверить это, выполнив это $ ("# eb-упражнения-" + musclegroup.get ('id')); если это возвращает пустой массив, то что-то не так
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню