Dojo onBeforeTransitionIn 未触发

Posted

技术标签:

【中文标题】Dojo onBeforeTransitionIn 未触发【英文标题】:Dojo onBeforeTransitionIn not firing 【发布时间】:2013-12-18 08:39:58 【问题描述】:

我对 Dojo 移动视图 (TweetViews) 中的转换事件有疑问。我想对视图更改执行操作(例如动态加载内容)。到目前为止,我已经尝试了以下方法:

on(document.getElementById("add"),"onBeforeTransitionIn", function()
    console.log("test");
);

onAfterTransitionInonBeforeTransitionOutonAfterTransitionOut 也不起作用。

我怎样才能让它工作?

【问题讨论】:

【参考方案1】:

Dojo 将小部件(如 dojox/mobile 视图)与 DOM 节点(如您使用 document.getElementById() 获得的那个)分开。这意味着您不能像您实际尝试那样在普通 DOM 节点上使用 onBeforeTransitionIn 事件处理程序。

幸运的是,小部件从 DOM 节点调整了它们的 ID,所以它仍然应该是 "add"。要通过 ID 检索小部件,您可以使用:

var myView = registry.byId("add");

dojo/on 模块只能用于 DOM 事件。您实际上可能会使其与自定义小部件事件一起使用,但我认为这不是处理这些事件的正确方法。通常你应该使用小部件on() 函数,例如:

myView.on("beforeTransitionIn", function() 
    // Do something
);

另请注意,您省略了事件名称前面的 "on" 部分。您还可以使用 dojo/on 模块来执行此操作,因此记住这一点以备将来使用可能会很有趣。

我还制作了一个小型 JSFiddle 来演示事件处理,您可以在此处找到它:http://jsfiddle.net/g00glen00b/qct3L/。

【讨论】:

【参考方案2】:

由于移动视图是一个小部件,您应该尝试在小部件而不是 DOM 节点上注册您的事件。示例:

on(registry.byId("add"), "onBeforeTransitionIn", ...)

注册表引用http://dojotoolkit.org/reference-guide/1.9/dijit/registry.html

【讨论】:

已经试过了,还是没有效果:/。像“点击”这样的事件起作用了,所以它可能与转换有关。

以上是关于Dojo onBeforeTransitionIn 未触发的主要内容,如果未能解决你的问题,请参考以下文章

dojo常用函数

Dojo dojo.rawXhrPost 和 dojo.xhrPost

dojo的ready函数:dojo.ready(以前的dojo.addOnLoad)

如何将 dojo (dojo 0.x) FilteringTable 迁移到 (dojo 1.6) 中的 DataGrid?

Dojo API中文 Dojo内容模块概览,初学者

Dojo 1.7 如何在 require() 之外使用 dojo 组件