backbone中,使用最多的莫过于在view中进行操作,如模板的渲染以及事件函数的定义。为了提高代码的可维护性,一般地我们会写多个视图即view,将界面按照功能的不同进行模块化划分,模块与view一一对应。
首先,我们会定义一个父view,在view中控制不同子view的渲染,子view之间尽量不产生联系。这样,代码之间的耦合度会降低很多,模块的功能明确化,同时降低了开发的难度。笔者最近在项目中遇到父子view传值问题,学习到了一个知识点,比较简单易懂。主要想分享两个内容:1.父子view是如何传值的。2.父子view传值要注意什么。以我实际的项目为例进行说明。
一、如何传值
项目中利用require.js按需加载js文件,大大地节约了资源。首先在global.js中申明子view的路径,方便在父view中进行引用。熟悉require.js的读者都知道,require.js是通过define进行函数的定义以及相关依赖模块的引入,这里不必细说,假设参数定义为childrenView。在父view中new一个childrenView对象,这样我们通过自定义事件进行操作就行。此时new的对象包含view的render方法等。如果在new childrenView(参数1)时,参数1可以为空,此时父子view之间没有值传递;当参数2存在时,父子view存在值传递,参数1是父view传递给子view的。在子view的initial(参数2)中可以接收参数1,即参数1和参数2是对等的。
此外,因为是在父view中new的子view,可以在父view可以对子view进行操作。
二、细节问题
通过一我们可以很方便在子view中接收父view的数据,但是这里有个细节问题。我曾在这里困惑好久。参数最好不要传父view,即父view的this或者view默认的事件函数等。因为这样做,参数会将子view默认的事件函数给覆盖,导致子view相同的事件函数失效。简单来讲,如果父子view都存在的,比如render,events或者其他定义相同的值或者是自定义函数不能作为参数传递。