Javascript 如何绑定应用程序的按键?

Javascript 如何绑定应用程序的按键?,javascript,mithril.js,Javascript,Mithril.js,如果绑定和事件是简单的变量更改,那么mithril会大量讨论它们,但是如果绑定是功能的+键,那么绑定又会怎样呢?我尝试了m.withAttr('keyCode')绑定到我想要处理它的控制器方法,但什么都没有 米特里尔不会为您处理整个页面和事件。您可以为window.onkeydown添加EventListener,并在该回调中执行您需要的操作,例如更新控制器或重新绘制页面 m.prop或m.withAttr本身不绑定任何内容。当您为对象(例如)指定某些onXXX属性时,就会发生真正的绑定 m

如果绑定和事件是简单的变量更改,那么mithril会大量讨论它们,但是如果绑定是功能的
+
键,那么绑定又会怎样呢?我尝试了
m.withAttr('keyCode')
绑定到我想要处理它的控制器方法,但什么都没有


米特里尔不会为您处理整个页面和事件。您可以为
window.onkeydown
添加EventListener,并在该回调中执行您需要的操作,例如更新控制器或重新绘制页面


m.prop
m.withAttr
本身不绑定任何内容。当您为对象(例如)指定某些
onXXX
属性时,就会发生真正的绑定

m('div', {onClick: myFunc})

这将把real
onClick
事件附加到将要创建的real
div
dom节点。

Mithril呈现fcn
m(标记、属性、子项)
允许您在
attrs
中指定特殊属性
config
。它允许您在创建DOM元素后调用该元素的方法。请参阅名为

您可以很容易地滥用Mithril,但它是附加非标准事件处理程序的正确用法。类似于以下的方法应该可以工作:

m('li', {config: setupKeyHandler}, 'foo');

function setupKeyHandler (el, isInitialized, context) {
  el.addEventListener('keyup', function (event) {})
}

对于不是DOM元素属性的属性,Mithril没有帮助器
withAttr
只处理DOM元素属性(顾名思义)。对于keyCode,您需要定义一个自定义帮助器

function withKey(key, callback) {
  return function(e) {
    var ch = String.fromCharCode(e.keyCode)
    if (ch == key) callback(key)
    else m.redraw.strategy("none") //don't redraw (v0.1.20+ only)
  }
}

m("div", {onkeypress: withKey("+", ctrl.doSomething)})

如果按下的键不是您要查找的键,else语句只是为了防止重画。

您可以尝试在上提问。第一个答案完全回答了这个问题。基本上,您可以将
回调
绑定到一个键。您不需要在以后的某个时间再次设置重绘策略以重新启用自动重绘吗?(顺便说一句,我真的很喜欢米特里尔)。不,m.redraw.strategy只适用于下一次计划的重画。很高兴知道;我不相信文档在任何地方都能清楚地说明这一点——我不记得读过(尽管我可能错过了)。是的,目前它有点简略。更好的文档将在0.1.22中发布