Событие Backbone click запускает события для всей коллекции, а не модели - PullRequest
7 голосов
/ 12 февраля 2012

Не могу понять, что не так.Когда я нажимаю на название модели, он выбирает сразу все модели в коллекции, а не одну модель.Если я переместлю это событие из logView в logsView, оно будет работать правильно, но не будет иметь доступа к модели, поэтому я могу найти эту модель, используя индекс или муравей идентификатор другой модели, но не думаю, что это хороший способ.

var Log = Backbone.Model.extend({});


window.LogsList = Backbone.Collection.extend({
    model:Log,

    url:function (tag) {
        this.url = '/logs/' + tag;
        return this;
    }
});

window.colList = new LogsList();

window.logView = Backbone.View.extend({
    el:$('.accordion'),

    template:_.template($('#log').html()),

    initialize:function () {
        this.model.bind('add', this.render, this);
    },

    events:{
        "click .accordion-toggle" :"getLogBody"
    },

    render:function () {
        return this.template(this.model.toJSON());
    },

    getLogBody:function () {
        this.model.fetch();
    }
});

window.LogsView = Backbone.View.extend({
    el:$("#content"),

    initialize:function (options) {
        colList.bind('reset', this.addAll, this);
        colList.url(options.data).fetch();
    },

    addOne:function (model) {
        var view = new logView({model:model});
        $("#accordion").append(view.render());
    },

    addAll:function () {
        colList.each(this.addOne);
    }
});

window.listView = new LogsView({data:"Visa_Cl"});

1 Ответ

10 голосов
/ 12 февраля 2012

Проблема вызвана вашим el в LogView: el:$('.accordion')

События представления Backbone являются областью действия для представления el. В этом случае вы указали el представления как ALL HTML-элементы с классом "accordion". Поэтому, когда вы нажимаете на любые ваших HTML-элементов с этим классом, код запускается для всех них, поэтому вы наблюдаете такое поведение.

Эта статья покажет вам несколько вариантов правильного выполнения того, что вы хотите:

Я бы также порекомендовал прочитать это, чтобы лучше понять использование el в Backbone и некоторые хитрости и ловушки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...