如何使用 MDC-Web 方法(例如 MDCIconButtonToggle)
How to use MDC-Web methods (e.g. MDCIconButtonToggle)
我在使 MDC-Web 方法/框架方法工作时遇到问题。具体来说,我正在尝试让 MDCIconButtonToggle 工作。我有一个图标按钮,单击时可以更改。我认为我设置它的方式是正确的,但是点击时它不会切换。
import {MDCIconButtonToggle} from '@material/icon-button';
import {MDCIconButtonToggleFoundation} from '@material/icon-button';
const iconButtonRipple = new MDCRipple(document.querySelector('.mdc-icon-button'));
iconButtonRipple.unbounded = true;
function handleToggleButtonClick(){
console.log("clicked");
const toggleBtn = new MDCIconButtonToggleFoundation(expBtn);
toggleBtn.handleClick();
}
var expBtn = document.getElementById("config-audio-button");
expBtn.addEventListener("click", handleToggleButtonClick);
当我 运行 时,每次单击按钮 "clicked" 都会按预期显示在控制台中,但图标不会更改/切换。如果我将 MDCIconButtonToggleFoundation 更改为 MDCIconButtonToggle,我会在控制台中收到一条错误消息,但按钮会切换。
错误消息声称 expBtn.addEventListener 不是函数,或者 handleClick 未定义。
所以在进一步搜索之后,我在 MDC Dialog documentation 中找到了一个 listen() 方法。只需按 ctrl+f 进行收听,您就会找到一些示例。
无论出于何种原因,这是第一个也是唯一一个我发现提到 listen() 方法的地方。如果有人知道 listen() 在哪里被明确记录,我很乐意为它提供 link 以了解更多信息。
以下是我的解决方案。我首先得到所有可切换元素的 HTML 集合。然后我遍历它们,并添加 listen() 事件侦听器方法来侦听更改事件。一旦change事件发生,按钮就会执行handleClick()/ toggle on/off.
// Get "array" of toggle-able arrow dropdowns.
var expandableArrowButtons = document.getElementsByClassName("mdc-icon-button add-margin-bottom");
// Iterate over all 3 expandable arrow icon buttons, and listen for a change event.
[].forEach.call(expandableArrowButtons, function(element){
const toggleBtn = new MDCIconButtonToggle(element);
toggleBtn.listen('MDCIconButtonToggle:change', function(){
console.log("clicked");
const tb = new MDCIconButtonToggleFoundation(toggleBtn);
tb.handleClick();
});
});
找到解决方法做得很好。
但对于可能遇到同样问题的其他人来说,这里有一个关于如何直接在组件上正确监听事件的明确说明,button
作为示例:
假设我们下面有一个按钮:
const someButton = new MDCIconButtonToggle(document.querySelector('.someButton'));
我们希望在点击时 alert("yes")
。我们将按如下方式注册事件:
someButton.listen('click', ()=> { alert("yes"); });
注意:
事件名称是正常的 javascript 事件,例如 "abort"
、"scroll"
、"change"
等
我在使 MDC-Web 方法/框架方法工作时遇到问题。具体来说,我正在尝试让 MDCIconButtonToggle 工作。我有一个图标按钮,单击时可以更改。我认为我设置它的方式是正确的,但是点击时它不会切换。
import {MDCIconButtonToggle} from '@material/icon-button';
import {MDCIconButtonToggleFoundation} from '@material/icon-button';
const iconButtonRipple = new MDCRipple(document.querySelector('.mdc-icon-button'));
iconButtonRipple.unbounded = true;
function handleToggleButtonClick(){
console.log("clicked");
const toggleBtn = new MDCIconButtonToggleFoundation(expBtn);
toggleBtn.handleClick();
}
var expBtn = document.getElementById("config-audio-button");
expBtn.addEventListener("click", handleToggleButtonClick);
当我 运行 时,每次单击按钮 "clicked" 都会按预期显示在控制台中,但图标不会更改/切换。如果我将 MDCIconButtonToggleFoundation 更改为 MDCIconButtonToggle,我会在控制台中收到一条错误消息,但按钮会切换。
错误消息声称 expBtn.addEventListener 不是函数,或者 handleClick 未定义。
所以在进一步搜索之后,我在 MDC Dialog documentation 中找到了一个 listen() 方法。只需按 ctrl+f 进行收听,您就会找到一些示例。
无论出于何种原因,这是第一个也是唯一一个我发现提到 listen() 方法的地方。如果有人知道 listen() 在哪里被明确记录,我很乐意为它提供 link 以了解更多信息。
以下是我的解决方案。我首先得到所有可切换元素的 HTML 集合。然后我遍历它们,并添加 listen() 事件侦听器方法来侦听更改事件。一旦change事件发生,按钮就会执行handleClick()/ toggle on/off.
// Get "array" of toggle-able arrow dropdowns.
var expandableArrowButtons = document.getElementsByClassName("mdc-icon-button add-margin-bottom");
// Iterate over all 3 expandable arrow icon buttons, and listen for a change event.
[].forEach.call(expandableArrowButtons, function(element){
const toggleBtn = new MDCIconButtonToggle(element);
toggleBtn.listen('MDCIconButtonToggle:change', function(){
console.log("clicked");
const tb = new MDCIconButtonToggleFoundation(toggleBtn);
tb.handleClick();
});
});
找到解决方法做得很好。
但对于可能遇到同样问题的其他人来说,这里有一个关于如何直接在组件上正确监听事件的明确说明,button
作为示例:
假设我们下面有一个按钮:
const someButton = new MDCIconButtonToggle(document.querySelector('.someButton'));
我们希望在点击时 alert("yes")
。我们将按如下方式注册事件:
someButton.listen('click', ()=> { alert("yes"); });
注意:
事件名称是正常的 javascript 事件,例如 "abort"
、"scroll"
、"change"
等