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

Mas*_*low 6 javascript mithril.js

如果它们是简单的变量更改,那么mithril会谈论很多关于绑定和事件的事情,但是绑定说关于+功能的关键呢?我尝试m.withAttr('keyCode')绑定到我想要处理它的控制器方法,但没有.

示例代码

Leo*_*rie 6

Mithril没有为不属于DOM元素属性的属性提供帮助程序.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)})
Run Code Online (Sandbox Code Playgroud)

如果按下的键不是您要查找的键,则else语句可以防止重绘.


Ale*_*lex 4

Mithril 不会处理整个页面,而是为您处理事件。您可以在该回调中addEventListener执行window.onkeydown您需要的操作,例如更新控制器或重绘页面。

http://jsbin.com/hikinoza/1/edit


orm.prop本身m.withAttr并不在任何地方绑定任何东西。当您为对象指定某些属性时,真正的绑定就会发生,onXXX例如

m('div', {onClick: myFunc})
Run Code Online (Sandbox Code Playgroud)

这会将真实事件附加到将创建的onClick真实dom 节点。div