IceMx. Mvc 나의 js MVC 프레임 워 크 3. 댓 글 모듈 을 작성 합 니 다.
33138 단어 mvc
본인 의 풋내기, 자신의 천박한 견 해 를 가지 고 있 으 니, 여러분 의 지적 을 바 랍 니 다.
이 프레임 워 크 는 다음 과 같은 장점 이 있다.
1. 간단 (호출 이 간단 하고 실현 이 간단 하 며 과도 하지 않 은 디자인)
2. 보기, 컨트롤 러, 모델 분리 (분 리 는 유지 에 매우 필요 합 니 다)
3. 구성 요소 화 (모든 화면 음악 모듈 의 실현 은 하나의 구성 요소 의 실현, M + V + C = 구성 요소)
보기
1 <div id="iceDiscussView">
2 <!--List -->
3 <div id="iceDiscussViewBody">
4 <span class="ll">
5 <textarea id="@{iceId1}" data-id="iceTxtContent" rows="3" cols="50" invalue=" ……" style="color: black;"></textarea></span> <span class="ll">
6 <input id="iceBtnSub" type="button" value=" " style="height: 54px;" /></span>
7 <br class="clear">
8 <span><a href="javascript:void(0)" onclick="FACE.Show('@{iceId1}',this)"><img src="/img/face/bq_btn.png" /></a> <a href="javascript:void(0)" id="iceDiscussShow"> <span id="iceDiscussCount"></span></a> </span>
9 <div id="iceDiscussPanel" >
10 </div>
11 </div>
12
13 <!--List -->
14 <div id="iceDiscussViewList" style='padding:5px 3px 5px 3px; border:1px dotted #cccccc'>
15 <div style="height:40px;"> <strong> @{userName}: @{insTime}</strong>
16 </div>
17 <div>@{content}</div>
18 <div>
19 <a id="iceDiscussReplyLink" href="javascript:void(0)" data-discussId="@{discussId}" > <span>@{replyCountStr}</span></a>
20 <br />
21 </div>
22 <div id="iceDiscussReplyList">
23
24 </div>
25 </div>
26
27 <div id="iceDiscussViewRepyList" style='padding:5px 3px 5px 25px; border:1px dotted #cccccc'>
28 <div style="height:40px;"> <strong> @{userName}: @{insTime}</strong>
29 </div>
30 <div>@{content}</div>
31 </div>
32
33 </div>
보 기 는 말 할 필요 도 없고, 사실 그 를 템 플 릿 이 라 고 부 를 수도 있다. @{username} 이 플래그 들 은 해당 하 는 데이터 로 대 체 됩 니 다.
특이 한 것 은 @ {iceId 1} 을 무 작위 id 로 바 꿉 니 다.
모형.
1 function DiscussModel() {
2 this.GetList = function () {
3 var list = [{ discussId:1,userName: " ", content: " , !", insTime: "2013-08-01", replyCount: 0 }
4 , { discussId: 2, userName: " ", content: " , !", insTime: "2013-08-01", replyCount: 3 }
5 ]
6
7 $.each(list, function (i,data) {
8 if (data.replyCount == 0) {
9 data.replyCountStr = "";
10 } else {
11 data.replyCountStr = "("+data.replyCount+")";
12 }
13 })
14
15 return list;
16 }
17 this.GetListCount = function () {
18 return 2;
19 }
20 this.Add = function (content, userName) {
21 var data = { content: content, userName: userName, insTime: IceMx.Date.Now()}
22 // aja
23 return data;
24 }
25
26 this.GetListReply = function (discussId) {
27 if(discussId==2){
28 return [{ userName: "IceMx", content: " !", insTime: "2013-8-31" }
29 ]
30 }
31 }
32 }
주로 데이터 처 리 를 담당 합 니 다. 여 기 는 데 이 터 를 모 의 한 것 입 니 다. 실제 상황 은 ajax 를 통 해 배경 에서 돌아 올 수 있 습 니 다. 현재 ajax 의 동기 화 모드 만 지원 합 니 다. 비동기 모드 는 아직 처리 하지 않 았 습 니 다.
컨트롤 러
var DiscussController = IceMx.Mvc.NewController("Discuss", function () {
//
var model = new DiscussModel(),
_self = this,
$body = $(IceMx.Model.Format(this.GetView("#iceDiscussViewBody").toString(), {})),
$txt = this.GetView("[data-id='iceTxtContent']", $body),
$btnSub = this.GetView("#iceBtnSub", $body),
$iceDiscussShow = this.GetView("#iceDiscussShow", $body),
$iceDiscussCount = this.GetView("#iceDiscussCount", $body),
$replyMuBan = this.GetView("#iceDiscussViewRepyList").toString(),
discussCount = 0;
//
this.listMuBan = this.GetView("#iceDiscussViewList").toString();
//
function SetDiscussCount(count) {
if (typeof count == "string") {
eval("discussCount=discussCount" + count);
} else {
discussCount = count;
}
if (discussCount == 0) {
return;
}
$iceDiscussCount.html("(" + discussCount + ")");
}
function Init() {
IceMx.Common.BindDefaultText($txt).BindEnter($txt, function () {
$btnSub.click();
});
$btnSub.click(function () {
_self.Add($txt.val(), " ").appendTo("#iceDiscussPanel", $body);
});
SetDiscussCount(model.GetListCount());
}
//
this.GetListHtml = function () {
var list = model.GetList(),
htm = "";
$.each(list, function (i,data) {
htm += IceMx.Model.Format(_self.listMuBan, data);
})
var discussHtm = $(htm);
discussHtm.delegate("#iceDiscussReplyLink", "click", function () {
var discussId=this.attributes["data-discussId"].value,
list = model.GetListReply(discussId),
$this= $(this),
htm = "";
if(list){
$.each(list, function (i, data) {
htm += IceMx.Model.Format($replyMuBan, data);
})
_self.GetView("#iceDiscussViewList", $this).find("#iceDiscussReplyList").append(htm);
}
})
SetDiscussCount(list.length);
return discussHtm;
}
this.GetBody = function () {
$body = $(IceMx.Model.Format(this.GetView("#iceDiscussViewBody").toString(), {})),
$body.find("#iceDiscussPanel").html("").append(this.GetListHtml());
return $body;
}
this.Add = function (content, userName) {
var data = model.Add(content, userName);
var htm = IceMx.Model.Format(_self.listMuBan, data);
SetDiscussCount("+1");
$txt.val("").blur();
IceMx.tip(" ……");
return $(htm);
}
Init();
});
컨트롤 러 는 주로 데이터 와 보기 의 다리 로 서 보기 안의 일부 사건 도 이 를 통 해 등록 합 니 다.
여기 this. GetView 는 보 기 를 가 져 오 는 것 입 니 다. 구성 요소 가 불 러 올 때 보 기 를 컨트롤 러 에 연결 하기 때 문 입 니 다.
호출 단
1 <script>
2 var discussController, FACE;
3
4 IceMx.Mvc.Get("Discuss","Face");
5
6 IceMx.Event.AddEvent("MvcLoadOver", function () {
7 FACE = new FaceController();
8 discussController = new DiscussController();
9 discussController.GetBody().appendTo("#panelDiscuss");
10 });
11 </script>
12 </head>
13 <body>
14 <form id="form1" runat="server">
15 <h1>Js Mvc </h1>
16 <div style="border:1px solid #cccccc ; padding:5px;"><span><b> js mvc </b></span>
17
18 <div style="background-color:#f8f8f8;padding:10px;">
19 <p> mvc 。</p>
20 <p>1、Controller 。</p>
21 <p>2、Model 。</p>
22 <p>2、View html 。</p>
23 <p>
24 : mvc js 。
25 :IceMx.Mvc.Get("Discuss","Face");
26 </p>
27 <p> mvc , MvcLoadOver , 。</p>
28 </div>
29 <br />
30 <div id="panelDiscuss">
31
32 </div>
33 </div>
34 </form>
35 </body>
36 </html>
jquery 、 IceMx.Mvc 。
IceMx.Mvc.Get("Discuss","Face"); 、 、 。
, , , 。
。
총결산
이것 이 바로 저의 사고 와 실현 절차 입 니 다. 여러분 의 가르침 을 바 랍 니 다.
기타
관심 이 있다 면 분 류 된 다른 글 에 관심 을 가 져 주 십시오. 당신 의 지 지 를 받 을 수 있다 면 감사 하지 않 을 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
클린 아키텍처의 Presenter를 이해하기 어려운 것은 MVC 2가 아니기 때문에클린 아키텍처에는 구체적인 클래스 구성 예를 보여주는 다음 그림이 있습니다. 이 그림 중에서 Presenter와 Output Boundary(Presenter의 인터페이스)만 구체 구현을 이미지하는 것이 매우 어렵다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.