【发布时间】:2013-05-03 01:51:31
【问题描述】:
Agility.js documentation 似乎很清楚地表明 Agility 对象可以接受任何有效的 jQuery 事件类型:
通过支持click、dblclick、mouseenter等常见的DOM事件 jQuery 的事件 API。请查阅 jQuery 的 API 以获取支持的事件列表。
但在文档和我见过的所有其他示例中,绑定到事件的所有控制器函数都没有参数。比如下面的sn-p直接取自the online docs:
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 事件,每个事件函数都有关联的数据。例如,如果我想使用Draggable 和Droppable 小部件,则在Droppable 上调用drop() 函数以指示已将Draggable 拖放到它上面,我需要drop(event, ui) 的参数来弄清楚它是可拖动的。
有什么方法可以声明我的控制器事件处理程序,以便我可以访问这些参数?或者,还有其他方法可以做我想做的事情吗?除了“它被触发”之外,没有得到关于控制器上事件的任何信息似乎是一个真正的缺点。我什至不确定是否可以扩展 Agility 以便它可以处理标准 DOM 事件以外的事件,尽管从我对代码的阅读中我看不出有任何理由不应该这样做。
Agility 确实为客户端代码提供了一个trigger() 函数来触发事件,该函数允许使用事件类型以外的参数。我想以某种方式将其连接到 jQueryUI 事件,但我不太明白如何。更重要的是,如果控制器看不到它们,为什么你甚至可以将参数传递给trigger()?
【问题讨论】:
标签: javascript jquery-ui model-view-controller agility.js