Dojo在Dijit中的交互

  结果页面板由MainPanel统一控制,方便重用,先看效果大笑

Dojo在Dijit中的交互_第1张图片


MainPanel.html

  在MainPanel中,指定了Navigation与SearchBar的内容,其中SearchBar在Json数据中配置,对应于unifySearch

UnifySearch.html的关键代码

  UnifySearch.js中关键代码


  值得注意的是,这里有两个onSearch()方法,其不同之处在于一个有前缀下划线,一个没有。那么这两个方法有什么区别呢? _onSearch()方法是unifySearch内部使用的方法,而onSearch()是对外(也可以称作对上层提供的接口)提供的方法,这样
降低了不同模块之间的耦合性。

  由于在MainPanel.html页面中,包含了SearchPlatform.html,当unifySearch中onSearch()方法调用时,SearchPlatform中的
onSearch()方法也随之调用。为什么SearchPlatform中的onSearch()方法会被调用呢?因为unifySearch页在点击Button时,会触发onClick事件,调用_onSearch()方法,_onSearch()方法又调用类中的onSearch()方法,SearchPlatform(见下面代码)页通过dojo.connect()监听了toolbar中的onSearch()方法,所以unifySearch中的onSearch()方法调用时,SearchPlatform中的onSearch()
方法就会被自动调用。


  下面看SearchPlatform.js的关键代码


  由上面代码可以看到,onSearch()方法,又跑到pagination页面中的onPaging()方法中去。这是因为我们所有对数据的查询操作,都是从分页模块进行处理的,所以分页模块是我们整个模块中重中之重的一部分。

  上面的内容是在不同的Panel内,父类调用子类的方法,方法的监听内容(也可以理解为方法的传递、调用),关于不同Panel间方法的传递,还有另外一种:broadcastEvent,在稍后我们将做简单介绍。下面,我们先介绍在子类中如何使用父类的方法。

  看上面的代码,SearchPlatform中onPageChange()方法中的dijit.setData(item)方法,此方法是SearchPlatform.html中用来传递给子页面resultItem.html.因为resultListNode是镶嵌在SearchPlatform页面中的,html代码如下(请结合onPageChange方法查看):

  因为resultItem.html是嵌套在searchPlatform页面中的,所以调用searchPlatform中的dijit.setData()时,子页面resultItem中会直接调用
setData()方法,如下所示,而不用在父类中监听子类的方法()



  上面我们已经介绍了如何在父页面与子页面之间传递数据,接下来我们再说一下如何在两个不同的面板中进行参数传递,还是看searchPlatform中的代码,

  上面两段div分别对应着两个不同的面板,分别是结果集与结果集的详细信息,这两个内容属于兄弟节点,我们如何在这两个页面间传递数据呢?
  这就用到了我们上面提到的broadcastEvent()方法。话不多说,以例为证。

  showResult是resultItem中Button触发时响应的方法,该方法通过broadcaseEvent向外广播一个事件,在其它页面中,只要捕获到ShowResultViewDetail方法,就可以将
  参数传递到所需要的页面中,我们看ResultView中的方法。

  通过broadcastEvent 和 handleXxxXxx就可以进行不同页面间交互了,是不是很High!

Dojo在Dijit中的交互_第2张图片


你可能感兴趣的:(dojo)