将事件对象传递给knockout.js函数

时间:2016-03-10 16:17:45

标签: javascript knockout.js knockout-3.2

我使用bind使用我的视图中的参数调用该函数:

<span data-bind="click: modifyByOne.bind($data, 'plus')"></span>

根据this answer我通过这样做获取event对象:

self.modifyByOne = function(type){
    var span = $(event.currentTarget);
};

在Chrome中一切正常,但在Firefox中我收到以下控制台错误:

  

事件未定义

我怎样才能让它在Firefox中运行? 淘汰文档并没有为此提供很多答案。

2 个答案:

答案 0 :(得分:5)

knockout click绑定将两个参数传递给侦听器方法:当前绑定上下文($data)和事件。

通过使用bind,您可以像指定的那样指定要传递给方法的其他参数。这些参数在两个默认参数之前传递。因此,您的方法应接受类型,数据事件参数。

self.modifyByOne = function(type, data, event){
  var span = $(event.target);
};

虽然这应该有效,但从代码中使用DOM来处理这些东西被认为是不好的做法。 Try creating a custom binding instead

答案 1 :(得分:0)

您未在功能签名中声明event参数。但除此之外,如果你需要访问Knockout中的实际DOM元素,你应该使用自定义绑定处理程序;你不应该从视图模型内部访问DOM。