1

Agility.js文档似乎很清楚地表明 Agility 对象可以接受任何有效的 jQuery 事件类型:

通过 jQuery 的事件 API 支持通常的 DOM 事件,例如 click、dblclick、mouseenter 等。请查阅 jQuery 的 API 以获取支持的事件列表。

但是在文档和我见过的所有其他示例中,绑定到事件的所有控制器函数都没有参数。例如,以下代码段直接取自在线文档

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', {
  'click &': function() {
    this.model.set({msg:"I've been clicked!"});
  }
});
$$.document.append(button);

这里附加到click事件的 lambda 显然是无参数的。这对于普通的 jQuery 事件来说是可行的,但是要使用 jQueryUI 事件,每个事件函数都有关联的数据。例如,如果我想使用DraggableDroppable小部件,则drop()在 Droppable 上调用该函数以指示已将 Draggable 拖放到它上面,并且我需要参数来drop(event, ui)确定它是哪个 Draggable。

有什么方法可以声明我的控制器事件处理程序,以便我可以访问这些参数?或者,还有其他方法可以做我想做的事情吗?除了“它被触发”之外,没有得到关于控制器上事件的任何信息似乎是一个真正的缺点。我什至不确定是否可以扩展 Agility 以便它可以处理标准 DOM 以外的事件,尽管从我对代码的阅读中我看不出有任何理由不应该这样做。

Agility 确实trigger()为客户端代码提供了触发事件的功能,该功能允许使用事件类型以外的参数。我想以某种方式将其连接到 jQueryUI 事件,但我不太明白如何。trigger()更重要的是,如果控制器看不到它们,为什么您甚至可以将参数传递给它们?

4

1 回答 1

1

该示例没有显示它是不幸的,但这并不意味着该论点不存在。

var button = $$({msg:'Click me'}, '<button data-bind="msg"/>', {
  'click &': function(jqEvent) {
    this.model.set({msg:"I've been clicked!" + jqEvent.target.nodeName});
  }
});
$$.document.append(button);

如有疑问,只需console.log(arguments)在您的事件处理程序中包含 a 并亲自查看。你会得到与 jQuery 相同的参数。

如果您尝试使用.trigger()额外的参数,您会发现那里也没有任何惊喜。

于 2013-05-03T06:12:44.170 回答