奇怪的问题:骨干模型在其中一种方法中显示出不同的价值

时间:2016-01-11 15:10:52

标签: jquery arrays twitter-bootstrap backbone.js jqxtreegrid

我在点击按钮时显示Bootstrap模态对话框(UserPermission),其中我正在显示显示用户列表的jqxTreeGrid。每个用户都有一些权限设置。

所以我有以下资源来设置Bootstrap模态对话框:

  1. 我有一个名为UserPermissionModel.js的

    的Backbone模型

    定义([' app','下划线','骨干'],

    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();                                 
    }
    

    On渲染后,我正在调用一个webservice,它给我一个用户列表,我将其保存在Model中的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
    });
    

    },

  3. 获得userList后,我使用方法loadListGrid在jqxTreeGrid上显示它们。

    在jqxTreeGrid ready方法中,我正在初始化popover。下面是我在Backbone视图的loadListGrid方法中放置的jqxTreeGrid代码

     $("#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
                        }
                        ]
                });
    

    网格中的每个用户都有一个按钮,显示带有一些单选按钮的弹出窗口。检查该用户的默认权限(我从模型中存储的权限数组中读取)。我可以为该用户选择不同的权限,并在该模型中更新该特定用户的权限数组。

    希望我能够解释这个功能。

    现在,当我第一次打开模态时。一切都很完美。 但当我关闭模态并再次打开它时,这就是问题发生的地方。 当我阅读里面的许可时,显示了.bs.popover&#34;方法,Backbone Model在Permission数组中具有我从未设置的值。它给了我错误的价值观。但在任何其他方法中它都具有正确的值

    我尽力在这里复制场景。如果有人有任何想法请评论。

    由于 •亚米恩

0 个答案:

没有答案