Странная проблема: Магистральная модель, показывающая другое значение в одном из методов

Я показываю модальное диалоговое окно Bootstrap (UserPermission) по нажатию кнопки, где я показываю jqxTreeGrid, отображающий список пользователей. У каждого пользователя есть свои настройки прав доступа.

Итак, у меня есть следующие ресурсы для настройки модального диалога Bootstrap:

  1. У меня есть модель Backbone с именем UserPermissionModel.js

    define (['app', 'underscore', 'backbone'],

    function(app, _, Backbone)
    {
        "use strict";
    
        var UserPermissionModel = Backbone.Model.extend({
    
            defaults: {  
    
                userList:[],
                permissions:[]
            }
    
        });
    
        return UserPermissionModel;
    

    });

  2. У меня есть View UserPermissionView, со следующими методами

    initialize: function () {    
       var self = this;    
       self.model = new UserPermissionModel();                                 
    }
    

    После рендеринга я вызываю веб-сервис, который предоставляет мне список пользователей, который я сохраняю в массиве userList в модели. Так как это первый раз, когда я устанавливаю разрешения, я установил для массива Permission значения по умолчанию.

    afterRender: function () {var self = this;

    self.model.set("userList", []);
    self.model.set("permissions", []);
    
    // Get all the users save them in model    
    AllUsers.fetch(function (Users) {
         Users.each(function (user) {
    
            // create the permission object reference
            var permission = new PermissionInfo();
    
            // set defaults
            permission.createJSON({
                userId: user.attributes.id,               
                read: "",
                write: ""
            });
            // Save the group in model
            self.model.get("userList").push(user);
            // Save the permission in model
            self.model.get("permissions").push(permission);
        });
    
        // Show the groups in jqxTreeGrid
        self.loadListGrid();
    }, function (error) {
        // error handling
    });
    

    },

Как только я получаю userList, я показываю их на jqxTreeGrid, используя метод loadListGrid.

Внутри готового метода jqxTreeGrid я инициализирую всплывающее окно. Ниже приведен код jqxTreeGrid, который я поместил в метод loadListGrid представления Backbone.

 $("#jqxListGrid").jqxTreeGrid({
                width: '100%',
                source: dataAdapter,
                theme: 'iltreegrid',
                columnsHeight: 35,                    
                ready: function() {

                    // initialize the Permission Setting Popover
                    var popOverSettings = {
                        placement: 'bottom',
                        container: 'body',
                        html: true,
                        selector: '[rel="popover"]',
                        content: $('#ad_permissionSettingPopover').html()
                    }

                    // bind the popover on body
                    $("body").popover(popOverSettings).parent().delegate('button.btn_permission_ok', 'click', function () {

                        //that.setDocumentPermissions();
                        app.pubSub.trigger("permissionPopover:onOk");
                        $("[rel=popover]").popover("destroy");
                        $(".popover").remove();

                    }).on("show.bs.popover", function (e) {

                        // hide all other popovers before showing the current popover
                        $("[rel=popover]").not(e.target).popover("destroy");
                        $(".popover").remove();

                    }).on("shown.bs.popover", function (e) {

                        // set the z-index of the popover as it is going behid the jqxTreeGrid Column
                        $('.popover').css('z-index', '999999');

                        // add the style class
                        $('.popover').addClass('jqxtreegridCell-popover');

                        // get the current value of permission settings and 
                        // mark the radio button checked

                         app.pubSub.trigger("permissionPopover:onShow");

                    });

                    // click on cancel button removes the popover
                    $("body").popover(popOverSettings).parent().delegate('div.btn_permission_cancel', 'click', function () {

                        $("[rel=popover]").popover("destroy");
                        $(".popover").remove();

                    });
                },
                columns: [
                    {
                        text: '<span class="ilicon ilicon-user"></span>' + app.i18n.t("doc_permission_userName", " User Name"),
                        datafield: 'userName',
                        cellsrenderer: userIconRenderer,
                        width:'40%'
                    },
                    {
                        text: '',
                        datafield: 'id',
                        width: '0%',
                        hidden: true
                    },
                    {
                        text: '<span>' + app.i18n.t("doc_permission_userType", "User Type") + '</span>',
                        datafield: 'userType',
                        width: '18%'
                    },
                    {
                        text: '<span>' + app.i18n.t("doc_permission_email", "Email") + '</span>',
                        datafield: 'userEmail',
                        width: '18%'
                    },
                    {
                        text: '<span>' + app.i18n.t("doc_permission_permissionSetting", "Permission Setting") + '</span>',
                        width: '24%',
                        cellsrenderer: permissionSettingRenderer,
                        sortable: false
                    }
                    ]
            });

У каждого пользователя в сетке есть кнопка, которая показывает поповер с некоторыми переключателями. Разрешение по умолчанию проверяется для этого пользователя (который я прочитал из массива разрешений, хранящегося в модели). Я могу выбрать другое разрешение для этого пользователя и обновить массив разрешений в модели для этого конкретного пользователя.

Надеюсь, я смог объяснить функциональность.

Теперь, когда я открываю модальное в первый раз. Все работает отлично. Но когда я закрываю модальное окно и открываю его снова, именно здесь возникает проблема. Когда я читаю permissins в методе "seen.bs.popover", у Backbone Model есть значения в массиве Permission, которые я никогда не устанавливал. Это дает мне неправильные значения. Но в любом другом методе он имеет правильное значение

Я старался изо всех сил повторить сценарий здесь. Если у кого-то есть идеи, пожалуйста, прокомментируйте.

Спасибо Ямин

0 ответов

Другие вопросы по тегам