在Erlang Web 框架 Nitrogen 中,您可以像这样连接操作:
wf:wire(send_message, #event { type=click, postback=send_message })
但如果在那之后你跑
wf:wire(send_message, #event { type=click, postback=send_message2 }),
然后你得到两次连线的动作。
你如何解开一个元素的前一个动作或所有动作?
在Erlang Web 框架 Nitrogen 中,您可以像这样连接操作:
wf:wire(send_message, #event { type=click, postback=send_message })
但如果在那之后你跑
wf:wire(send_message, #event { type=click, postback=send_message2 }),
然后你得到两次连线的动作。
你如何解开一个元素的前一个动作或所有动作?
由于氮气中的事件是使用 jquery 的绑定方法绑定的。您可以使用 unbind 解除绑定。目前没有用于解除绑定事件的氮 API,但如果您愿意,您可以输出 javascript 代码自行解除绑定。
有关如何输出绑定 javascript 的示例,请参见action_event.erl 。您可以创建一个类似的操作/事件来删除绑定。
我也在寻找“unwire”,但没有找到。我的解决方法是 wf:replace() 连接事件的元素,然后连接替换元素;我希望 javascript 最终会注意到以前的绑定永远不会被调用,然后垃圾收集它。我不知道这种废弃的绑定有多贵。我的上下文是页面的延迟加载,这样一个按钮最初会显示一个存根,但是当点击时会下载任意大的内容,然后切换隐藏/显示。
除了对 javascript 垃圾收集的复杂性感到紧张之外,我还担心这可能是一种糟糕的模式,并且很想听听其他人的经验。我唯一的选择是将状态(例如数据)保留在原始元素中并将该状态与事件消息一起传回,以便相同的事件处理程序对“unloaded->loaded_show->loaded_hide->loaded_show “过渡。但我不希望回调服务器进行简单的隐藏/显示转换。