javascript - Mithril.js m.withAttr : Passing event to another function

标签 javascript mithril.js

我正在浏览Mithril tutorial我无法理解 m.withAttr。该指南在 View 层中有以下行:

m(“input[type=checkbox]”,{onclick:m.withAttr(“checked”,task.done),checked:task.done()})

我有两个问题。

1)我理解前半部分,onclick: m.withAttr("checked", task.done) 本质上意味着: '使用 m.prop 将 task.done 设置为“checked”属性的值'。但是后半部分的目的是什么,checked:task.done()?看起来只是简单地重复前半部分。

2) 在学习本教程时,我想添加将待办事项保存到持久层的功能。我创建了一个保存函数,以便我可以将上面引用的行重构为:

m("input[type=checkbox]", { onclick: todo.vm.markAsDone.bind(todo.vm, task)})

在我的 View 模型中,我有以下功能:

vm.markAsDone = function(todo) {
      m.withAttr("checked", todo.done), checked: todo.done();
      todo.save();
    };

但这并没有奏效;我收到 Uncaught SyntaxError: Unexpected token : 错误。我认为问题在于该事件没有正确绑定(bind)到 markAsDone 函数,因此它不理解 "checked" 属性;但我不确定如何解决这个问题(如果这就是问题的话)。

感谢您的帮助。

最佳答案

问题1

m()的第二个参数函数定义 HTML 元素的属性,在本例中为 <input type=checkbox>将被装饰。 (异常(exception)是特殊的 config 字段)

  • checked确定输入复选框是否被选中,因此需要显示任务的状态。
  • onclick是将修改状态的事件处理程序。

所以属性做不同的事情,因此两者都是需要的。

问题2

markAsDone通过 todo模型,您不必执行任何操作 m.withAttr打电话到那里。只需修改模型,然后让 Mithril 重新绘制 View 即可。如果您调用markAsDone,重绘会自动发生。通过像 onclick 这样的事件.

如果您想了解有关重绘过程的更多信息,我在previous SO question中进行了总结。 .

编辑:markAsDone可能看起来像这样:

vm.markAsDone = function(todo) {
    todo.done(true);
    todo.save();
};

关于javascript - Mithril.js m.withAttr : Passing event to another function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31109401/

相关文章:

javascript - 使用输入按钮提交表单

javascript - 如何用 mithril 等价物替换 jquery?

javascript - 通过 CDN 包含 Streams 模块

javascript - Mithril ajax 发送空输入

javascript - Mithril.js:如果 View 使用子组件,则排序数据不会重新呈现

html - 使用 Mithril 为 Bootstrap Accordion 生成 HTML

javascript - 为什么汉堡包菜单 block 在打开时不显示?

javascript - 滚动结束后如何调用函数?

javascript - 如何使删除按钮与 li 位于同一行删除同一行的 li

javascript - 是否有类似 Jquery 内存或缓存的东西?