通过事件处理程序启用 Dojo 按钮

Posted

技术标签:

【中文标题】通过事件处理程序启用 Dojo 按钮【英文标题】:Dojo enable button by event handler 【发布时间】:2016-05-12 16:24:18 【问题描述】:

我正在使用 IBM Content Navigator 2.0.3,它使用 DOJO 1.8 进行 GUI 开发。我是 dojo 的新手,我必须增强其中一种形式:向 dataGrid 添加一个事件处理程序,以便在选择网格的行时启用其中一个按钮。 我已经设法按照本期的建议添加了事件处理程序:dojo datagrid event attach issue 但我仍然无法启用该按钮。这是表单的html

添加 消除
<div class="selectedGridContainer" data-dojo-attach-point="_selectedDataGridContainer">                     
<div class="selectedGrid" data-dojo-attach-point="_selectedDataGrid" ></div>
</div>

附图描述了它的外观enter image description here.enter image description here postCreate函数的js文件代码如下:

postCreate: function() 
        this.inherited(arguments);
        this.textDir = has("text-direction");

        domClass.add(this._selectedDataGridContainer, "hasSorting");
        this._renderSelectedGrid();

        this.own(aspect.after(this.addUsersButton, "onClick", lang.hitch(this, function() 
            var selectUserGroupDialog = new SelectUserGroupDialog(queryMode:"users", hasSorting:true, callback:lang.hitch(this, function (user) 
                this._onComplete(user);
                this._markDirty();
            ));
            selectUserGroupDialog.show(this.repository);
        )));

        this.own(aspect.after(this.removeUsersButton, "onClick", lang.hitch(this, function() 
            if (this._selectedGrid != null) 
                var selectedItems = this._selectedGrid.selection.getSelected();
                if (selectedItems.length > 0) 
                    array.forEach(selectedItems, lang.hitch(this, function(item) 
                        this._selectedGrid.store.deleteItem(item);
                    ));
                
                this._selectedGrid.selection.clear();
                this._selectedGrid.update();
            
            this._markDirty();
        )));

// the following handler was added by me
        dojo.connect(this.myGrid, 'onclick', dojo.hitch(this, function()
            console.log(" before ");
        this.removeUsersButton.set('disabled', true);
            console.log(" after ");
        ));

    ,

所以 this.own(aspect.after(this.removeUsersButton..... 工作正常并且在我的干扰之前工作。所以它以某种方式访问​​ this.removeUsersButton 并处理事件。但是我的处理程序 dojo.connect(this.myGrid ....在不启用删除按钮之前和之后只打印Console.log()。该按钮没有ID,只有数据 - Dojo-Attact-point。选择DAAGRID时,如何启用删除按钮?

【问题讨论】:

【参考方案1】:

使用 this.removeUsersButton.set('disabled', true);您正在将按钮设置为禁用。如果要启用它,则需要将其设置为 false。

this.removeUsersButton.set('disabled', false);

【讨论】:

之后我必须断开处理程序吗?如果是,我应该把代码放在哪里? 不需要,这取决于事件中的实现。如果您要更新某些内容,那么您将不得不考虑。如果它只是启用一个按钮,没关系。因为再次设置它不会改变任何东西。如果你想让某个事件只工作一次,那么你应该使用“on.once”。

以上是关于通过事件处理程序启用 Dojo 按钮的主要内容,如果未能解决你的问题,请参考以下文章

处理 dojo gridx 中分页的更改事件

GIS-005-Dojo事件处理

HTML文本输入事件

带有 IndirectSelection 的 dojox.enhancedGrid 中复选框的事件处理程序

如何实现 WM_LBUTTONCLICK 事件处理程序

防止对话框在按钮的单击事件处理程序中关闭