Widok tabeli szkieletowej zużywający widok wiersza - jak go ustrukturyzować?

Mam kolekcję modeli, które chcę renderować w widoku tabeli. Każdy model powinien być reprezentowany przez pojedynczy wiersz w tabeli, a ten wiersz powinien być generowany przy użyciu szablonu. Powinienem mieć możliwość dołączania programów obsługi zdarzeń do tego wiersza (powiedzmy kliknięcie), które po zdarzeniu ostrzegają o określonych informacjach dotyczących modelu powiązanego z tym wierszem.

Powszechnym sposobem, w jaki widziałem podobne rzeczy, jest przerwanie każdego wiersza w jego własnym widoku i uzyskanie widoku nadrzędnego (powiedzmy, że tabela w tym przypadku) używa widoku wiersza, aby wygenerować kod HTML do uwzględnienia w kodzie . Jednak nie wiem, jak to działa z szablonami.

W tym przypadku nie mogę dołączyć zdarzeń specjalnie do RowView, ponieważ nie ma odniesienia do elementu dom (this.el dla szkieletu), po prostu zwraca łańcuch. Jak mogę osiągnąć to, czego chcę, korzystając z szablonu do maksymalnej pojemności?

Pytanie nie dotyczy konkretnie zdarzeń, tworzenia szablonów lub używania zagnieżdżonych widoków, ale raczej właściwego sposobu użycia Backbone do osiągnięcia tego rodzaju wyników.

Przykładowy kod (także w askrzypce):

<code>/** View representing a table */
var TableView = Backbone.View.extend({
    tagName: 'table',
    render: function() {
        var rows = _.map(this.collection.models, function(p) {
            return new RowView({model: p}).render();                        
        });
        $('body').html(this.$el.html(rows.join('')));
    }
});

/** View representing a row of that table */
var RowView = Backbone.View.extend({
    render: function() {
        // imagine this is going through a template, but for now
        // lets just return straight html.
        return '<tr>' + 
                '<td>' + this.model.get('name') + '</td>' + 
                '<td>' + this.model.get('age') + '</td>' +
               '</tr>';
    }
});

var data = [
    {'name': 'Oli', 'age': 25},
    {'name': 'Sarah', 'age': 20}];

/** Collection of models to draw */
var peopleCollection = new Backbone.Collection(data);
var tableView = new TableView({collection: peopleCollection});
tableView.render();
</code>

Dziękuję Ci!

questionAnswers(1)

yourAnswerToTheQuestion