Проблема с переменной областью действия во вложенных представлениях Backbone - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть родительское представление, которое содержит представление Backgrid.В разделе инициализации родительского представления я определяю переменную isWellSelected.Переменная переключается в логике столбца Backgrid, когда отмечен флажок.Я могу наблюдать, как переменная переключается, когда флажок отмечен и снят.

Однако, как только событие запускается, переменная больше не находится в области видимости события.Я подозреваю, что мне может понадобиться передать переменную в представление Backrgrid, но я не уверен, как это сделать правильно.Пожалуйста, сообщите.

app.wellCollectionView = Backbone.View.extend({
    template: _.template($('#wellTemplate').html()),
    initialize: function() {
        this.isWellSelected = false;

        // isWellSelected toggled to true when a tickbox is checked in the columns block.
        var columns = [...];

        // instantiate collection
        var wellCollection = new app.wellCollection;

        // Set up a grid view to use the pageable collection
        var wellGrid = new Backgrid.Grid({
            columns: columns,
            collection: wellCollection
        });

        // Initialize the paginator
        var paginator = new Backgrid.Extension.Paginator({
            collection: wellCollection
        });

        // Render the template
        this.$el.html(this.template());

        // Render the grid
        this.$el.append(wellGrid.render().el);
        this.$el.append(paginator.render().$el);

        wellCollection.fetch({reset: true}).then(function () {...});
    },

    events: {
        'click #EvaluateWell': function(){
            this.evalWell(event, this.isWellSelected);
            console.log("In events - isWellSelected: " + this.isWellSelected);}
    },

    // More stuff
}

Конструктивная обратная связь приветствуется.

Спасибо!

Добавление фрагмента для "столбцов" согласно запросу JT:

var columns = [
{
    name: '',
    label: 'Select',
    cell: Backgrid.BooleanCell.extend({
        events : {
            'change': function(ev){
                var $checkbox = $(ev.target);
                var $checkboxes = $('.backgrid input[type=checkbox]');

                if($checkbox.is(':checked')) {
                    $checkboxes.attr("disabled", true);
                    this.isWellSelected = true;

                    // Disable all checkboxes but this one
                    $checkbox.removeAttr("disabled");
                } else {
                    // Enable all checkboxes again
                    $checkboxes.removeAttr("disabled");
                    this.isWellSelected = false;
                }
            }
        }
    })
}, {
    name: "api",
    label: "API",
    editable: false, // Display only!
    cell: "string"
}, {
    name: "company",
    label: "Operator",
    editable: false, // Display only!
    cell: "string"
}];
...