最近老博会代表夕阳再晨参展,乐帝负责统筹展区安排,这就逼迫乐帝需要思考有哪些是需要询问、哪些是需要酌情解决的。最后得出结论,举办活动所考虑的无非三件事:人、物、流程。人指的是人员组织与分工、即人的安排,物涉及物得摆放与交接,流程则是将人与物按照时间的顺序安排到位,组织活动特别像导演电影,人和物都在那里,如何组织起来才能体现出导演水平的高低。
老博会归来有几点感悟:
- 老年产业得到了越来越多公司机构的重视。
- 老年人对除了药之外消费观念还需要慢慢引导。
- 老年产业不缺少创新、缺少能够使资源有效整合的推广人才。
说到本次做到的项目,各个view视图树形关系,如下图所示:
有了视图间树形关系,下一步只需要看父子视图数据或信号的传递,就可以快速掌握整个项目逻辑关系,本项目父子视图数据或信号传递渲染逻辑关系,如下图:
再遇到项目时,首先理清楚父子视图关系、然后看数据传递,最后再按照规律一,统一思考整个项目逻辑,就会节省大量时间,高效完成工作了。
下面则是本次项目中遇到的一些知识点:
1.调用接口返回异步数据问题
最近无论是做单页面项目,还是移动端多页面项目,都被异步返回数据折磨的够呛,最表层的问题是,当数据还没返回来时,你需要给用户一个提示。这次MVC架构中反映的问题更深层,如何处理好未返回数据时,模板渲染、其他函数执行的问题。
这里使用了公司内部封装的一个异步接口调用方法:
_.getDataSync(
new Talent.Model(), "MobileSetting/JobAdSetting/GetFormSystemFieldList", {
data: null
}, "fetch"
)
如乐帝对 延迟对象的讨论,这个异步调用接口方法返回的是一个延迟对象,这就回到了延迟对象的范畴。如下述代码所示:
var self = this;
// 调用系统列表接口
var dtd = self.getFormSystemFieldList();
$.when(dtd).done(function(resp) {
self.systemFieldList = resp;
self.model = new Talent.Model({
systemFieldList: resp
});
//设置本view的model重新渲染数据到模板,再触发父视图将子视图显示出
self.render();
self.trigger("systemFieldListData", resp);
});
采用延迟对象方法,当执行完再执行回调,重新渲染数据至模板 。MVC中渲染和显示即render和display是两个范畴。渲染是将数据填充到模板,显示才是将渲染好的模板显示在指定位置。
这里解决异步调用取得view数据的方法即:采用延迟对象完成时,回调重新渲染数据至模板。
另外要提到的一点是,接口报500,一般会是传参数有问题。
由于一开始view有些变量是没有的,这里采用如下代码解决变量未定义的问题:
typeof fs
2.view中html元素的取用
以前在view中取用html元素,直接采用jquery dom对象方法取用,而这种方法起作用是有个前提的即:
$(document).ready()
也即dom文档在浏览器加载完,并显示出来才能采用jquery dom对象取用的方法,这在MVC架构中就会存在当模板虽然渲染但是还没有显示(show)时,这样采用jquery方法取html元素是无效的。所以统一推荐采用以下方法取html元素:
var dataType = this.$el.find(".fieldList").find("option:selected").attr("data-dataType");
即$el.find()这种层级选择方法。
3.项目中用到的特殊视图类
(1)Layout (官方文档为LayoutView)
- LayoutView是ItemView和一系列Region对象的混合模式。
- 对于渲染拥有多个子region应用布局非常理想。
- layoutView 也可以用于CompositeView使多个view聚集。
- 你可以在Regions中通过层叠使用layoutView 管理器操作复杂的view。
- CompositeView 继承自CollectionView,作为混合视图被使用。
- 常见使用场景:在树形结构中,既是枝条又是叶子的角色,即中间层view角色。或者在一个外层模板中,一个collection需要被渲染。
4.github合并代码操作
(1)提交代码前,先查看当前状态
(2)如果需要添加文件则用add命令添加,否则采用checkout忽略添加
(3)本地提交所有文件并作注释
(4)合并远程分支