Board logo

标题: 基于 Dojo toolkit 实现 web2.0 的 MVC 模式-3 简化代码 [打印本页]

作者: look_w    时间: 2018-8-23 20:51     标题: 基于 Dojo toolkit 实现 web2.0 的 MVC 模式-3 简化代码

第三部分 使用 dojo 的 subscribe 和 publish 方式简化代码由于 dojo1.2 版本已经提供 subscribe/publish 消息通知机制,所以可以将 model 与 view 的关系使用 subscribe/publish 机制来简化。简化后 model 被 subscribe/publish 机制中的 topic 代替 .
下面为简化后的代码。
清单 19. 修改后的 VIEW.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if (!dojo._hasResource["taas._base.View"]) {
dojo._hasResource["taas._base.View"] = true;
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.provide("taas._base.View");
dojo.declare("taas._base.View",null,{
   _model:null,
   topic:"",
   _taasSrcPath:dojo.moduleUrl("taas",""),
   responseObject:null,
   refresh:function(object){
     this.responseObject = object;   
     if(this.updateView!=undefined&&typeof this.updateView=="function"){
       this.updateView(this.responseObject);
     }
   },
   bindModel:function(dataModel){
     this._model = dataModel;      
   },
   _bindTopic:function(){      
     if(this.topic!=undefined&&this.topic!=""){
       dojo.subscribe(this.topic,this,"refresh");
     }
   }
});
}




清单 21. 修改后的 Controller.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
if (!dojo._hasResource["taas._base.Controller"]) {
dojo._hasResource["taas._base.Controller"] = true;
dojo.provide("taas._base.Controller");
dojo.declare("taas._base.Controller",null,{
});
taas._base.Controller.remoteUpdate = function (dataModelUri,topic,requestContent){
   _topic = topic;
   _dataModelUri = dataModelUri;
   _requestContent = requestContent;
   console.debug(_requestContent);
   var doResponse = function (responseText){
     dojo.forEach(_topic,function(item){
       var jsonObj = dojo.fromJson(responseText)[item];
       //console.debug(dojo.toJson(jsonObj));
       dojo.publish(item,[dojo.toJson(jsonObj)]);  
     });   
   };
   var getFormJson = function() {      
     dojo.xhrGet({
       url: _dataModelUri,
       preventCache: true,
       content:_requestContent,
       handleAs: "text",
       method:"get",
       load: doResponse
     });
   };
   var getFromForm = function() {
     dojo.xhrGet({
       url: _dataModelUri,
       preventCache: true,
       form:_requestContent,
       handleAs: "text",
       method:"get",
       load: doResponse
     });
   };   
   var doRequest = function () {   
     if(dojo.isObject(_requestContent)) {
       getFormJson();
     }
     else if(dojo.isString(_requestContent)){
       getFromForm();
     }
   };   
   doRequest();   
}  
}




如何使用
1
2
3
4
5
<input type="button"
onclick='taas._base.Controller.remoteUpdate (
'http://localhost:8080/servlet/ProjectManagement ' , ["projects"], {
       'action' : 'querybyuserid'
     });”




清单中代码中 onclick 属性调用了 Controller 的 remoteUpdate 方法,该方法将调用远程 servlet 的 doGet/doPost 方法,并将相应的请求参数发给远程 servlet。远程 servlet 收到请求后进行相应的业务逻辑处理,最后将处理结果返回到 controller 的回调函数执行从而刷新视图。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0