精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于Dojo實現MVC模式下的Ajax應用

開發 前端
Dojo是一個用JavaScript語言實現的開源DHTML工具包。Dojo能夠讓你更容易使Web頁面具有動態能力,或者在任何能夠穩定支持JavaScript語言的環境中發揮作用。本文即是在Dojo基礎上實現MVC模式下的Ajax應用。

本人要實現項目中的一項應用是控制服務端返回來的音頻、文字在客戶端播放時的同步,相信都看到過baidu的歌曲試聽吧,聲文同步且支持拖放同步,此次實現多它一個功能,那就是點哪一句就播哪一句(當然我不是為了播放歌曲).簡要說我在和服務器的交互中使用JSON(javascript object notation)傳輸數據,服務端用Newtonsoft的.Net組件處理JSON數據序列化,至于具體的JSON格式那就你自己定義了,例如(最簡單的):

{ 
      Media : [{
      text : "......",
      start : "...",
            end : "...."
         },  ....]
         }

至于js下的MVC實現,或許許多人這樣認為“js僅僅是個腳本而已”,大概應是Ajax的出現改觀了許多人對js的看法,其實用js可以寫出完全面向對象的程序,因為js支持面向對象語言的幾大重要特性,應是一直以來大家所見到的js腳本給大家造成了不好的印象,js原本就是面向對象的語言(我們見到許多由它寫成的結構化的程序).看一下這篇文章,我的實現也是受它啟發,延伸一點的就是引用Dojo的事件訂閱、發布機制.

說一下上述陳述功能的具體的實現,在model方面實現首先實現一個容器型的model,解析JSON數據并擁有當前句信息、所有句信息(數組)、設定當前句方法:

ContainerModel:

dojo.lang.declare('ContainerModel',null,{
    initializer : function(jsonData)
    {
        var jsonObj=dojo.json.evalJson(jsonData);
        var sentences=new Array();
        for(var key in jsonObj.Sentences)
        {
            var sentenceObj=new SentenceModel(key,jsonObj.Sentences[key]);
            sentences.push(sentenceObj);
        }
        this._sentences=sentences;
        this._url=jsonObj.MediaUrl;
        this._selectedSentence = sentences[0]
    },
    
    getSentences : function () {
        return [].concat(this._sentences);
    },

    addItem : function (sentence) {
        this._sentences.push(sentence);
    },    

    setSelected : function (sentence) {
        this._selectedSentence = sentence;
    },
    
    reset : function (){
        this._selectedSentence = this._sentences[0];
    }
});

ItemModel:

dojo.lang.declare('ItemModel',null,{
    initializer : function(id,sentence)
    {
        this._id=id;
        this._jsonSentence=sentence;
       
        dojo.event.topic.subscribe("/PositionChange", this, this.invokeActive);
    },
   
    invokeActive : function(currentPos){
        //if curPos between this.startTime and this.endTime pulish:
        if(this._jsonSentence.StartTime<=currentPos && this._jsonSentence.EndTime>currentPos)
            dojo.event.topic.publish("/MeInvoked", this);
    },
   
    clickActive : function(){
        dojo.event.topic.publish("/MeClicked",this);
    }
});

另一個model代表上述的一句的信息,包含text、startTime、endTime,并且訂閱“/positionChange”事件(后面據mediaplayer定時發布),同時定義兩方法(此處會于View中用dojo.event的connect將其連于特定的用戶事件)用于發布當前對象被激活的事件,于view中同時會為controller訂閱此對象激活所發布的事件,controller處理時會刷新container model的當前項同時更新view的表現(如添加樣式),其中view對象除了為其他對象進行一些事件連接、訂閱外,其render方法負責將container model的所有項render成特定的html元素(如span),其中決定model的顯示形式:

Viewer - Controller:

/**
 * a container view class to render on the webpage
 */
dojo.lang.declare('MainView',null,{
    initializer : function(model,controller,elements){
        this._model=model;
        this._controller=controller;
        this._elements=elements;
       
        dojo.event.topic.subscribe("/MeInvoked", this._controller, this._controller.proccessInvoke);
        dojo.event.topic.subscribe("/MeClicked", this._controller, this._controller.proccessClick);
    },
   
    render : function(){
        var div = this._elements.div;
        //remove children
        for(var i=0;i<div.childNodes.length;i++)
        {
            div.removeChild(div.childNodes[i]);
        }
        div.innerHTML="";
        div.innerText="";
       
        var items = this._model.getSentences();
        for (var key in items) {
            var span = document.createElement("span");
            span.id=items[key]._id;
            span.appendChild(document.createTextNode(items[key]._jsonSentence.Sentence));
            span.appendChild(document.createElement("br"));
            div.appendChild(span);
           
            if(key==0)
                dojo.html.addClass(document.getElementById(this._model._selectedSentence._id),"selected");
           
            dojo.event.connect(span, 'onclick', items[key], 'clickActive');
        }
    }
   
});

/**
 * a common controller class,
 * execute some utilities operations.
 */
dojo.lang.declare('MainController',null,{
    initializer : function(model){
        this._model=model;
    },
   
    displaySentence : function(){       
        //actual method
        dojo.event.topic.publish("/DisplaySentence",this._model._selectedSentence._jsonSentence);
    },
   
    proccessInvoke : function(sentence){
        //proccess details
        this.proccessRightShow(sentence);       
    },
   
    proccessClick : function(sentence){
        //proccess details
        this.proccessRightShow(sentence);       
        //set player pos(start,end)
        setPlayerPos(sentence._jsonSentence.StartTime);
    },
   
    proccessRightShow : function(sentence){
        //lighten sentence and show sentence on the right
       
        if(this._model._sentences[0]==sentence || this._model._selectedSentence!=sentence)
        {
            //change origin selectedSentence's css
            dojo.html.removeClass(document.getElementById(this._model._selectedSentence._id),"selected");
            this._model.setSelected(sentence);
            //change new current selectedSentence's css
            dojo.html.addClass(document.getElementById(this._model._selectedSentence._id),"selected");
            document.getElementById(parseInt(this._model._selectedSentence._id/1.2)).scrollIntoView(true);
            //pass sentence to show in right in another func
            this.displaySentence();
        }
    }
});

大概模式如下:

圖中對象初始化會subscribe合適的事件以待事件publish時進行處理,其中虛線表示一次用戶點擊處理,而自由線表示隨播放進行處理文本同步(如加亮當前項)的過程,此過程在播放過程中持續進行。其實,事件發布并非圖中所示指向特定對象(圖中為了容易理解),是誰訂閱誰處理,有AOP的意味!

相信有了這些,讓這個模型運行起來是沒問題了吧,忙中抽閑和大家分享,另外dojo的require不要忘了

dojo.require('dojo.lang.*');
dojo.require("dojo.event.*");
dojo.require("dojo.event.topic");
dojo.require("dojo.html.*");
dojo.require("dojo.json");
dojo.require("dojo.io.*");

腳本的開發還是比較困難的,從開發環境、或從其控制來講,正如Pragmatic Programmer中所說的,“不***的系統、荒謬的時間標度、可笑的工具、還有不可能實現的需求--在這樣一個世界上,讓我們安全‘駕駛’”!

【編輯推薦】

  1. AJAX和XmlHttpRequest下的Web開發
  2. 淺談Ajax在ASP.Net中的使用
  3. 使用AJAX擴展器自定義控件
責任編輯:楊鵬飛 來源: 博客園
相關推薦

2009-03-09 09:45:07

MVCAjax.Net

2009-09-22 12:22:54

ibmdwLotus

2009-01-03 14:39:04

ibmdwDojoMVC

2011-01-24 13:12:01

AjaxDojojavascript

2009-01-03 16:29:45

AJAXASP.NET.NET

2017-11-23 17:21:31

Yii框架IntelYii框架深度剖析

2009-11-24 14:22:03

基于PHP的AJAX技

2012-11-12 10:34:50

IBMdw

2012-09-28 10:18:53

IBMdw

2011-08-01 16:43:51

ibmdwHTML5Dojo

2012-08-13 10:23:33

IBMdW

2012-12-18 10:03:22

JavaScriptWebJS

2012-12-18 13:32:45

IBMdW

2009-07-30 13:45:40

ASP.NET開發模式MVC模式

2009-06-01 09:13:52

ASP.NET MVCMVC應用ASP.NET MVC

2011-09-08 09:38:46

HTML5 WidgeDojo

2009-03-31 13:12:05

ASP.NETMVC表單驗證

2011-05-18 13:28:46

jQueryPHPAJAX

2017-11-22 14:08:23

OVSVLAN虛擬化網

2009-07-22 18:07:55

論壇應用程序ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

精品伦理一区二区三区| 亚洲国产精品嫩草影院久久| 日韩中文字幕一区| 在线观看亚洲一区二区| 女同性一区二区三区人了人一| 精品久久久久久久久久久久包黑料| 无码精品a∨在线观看中文| 精华区一区二区三区| 免费一级欧美片在线观看| 久久最新资源网| 中文字幕在线永久| 香蕉久久久久久| 亚洲成人免费视| 亚洲精品中文字幕在线 | 欧美在线色视频| avove在线观看| 欧洲亚洲精品视频| 国产精品亚洲成人| 国产精品欧美激情在线播放| 国产在线免费视频| 日韩精品网站| 国产视频丨精品|在线观看| 亚洲天堂网站在线| 欧美aaa视频| 五月天婷婷综合| 一区二区三区四区欧美| 久久久久久久久亚洲精品| 国产凹凸在线观看一区二区| 成人美女av在线直播| 无码人妻丰满熟妇区五十路 | 午夜精品久久久内射近拍高清| h片在线免费观看| 中文字幕av在线一区二区三区| 国产伦精品一区二区三区视频孕妇 | yw193.com尤物在线| 成年人网站91| 91文字幕巨乱亚洲香蕉| 国产人妖一区二区| 久久99精品久久久久久国产越南 | 亚洲精品一区av| 在线国产电影不卡| 男女曰b免费视频| 五月天国产在线| 婷婷中文字幕综合| 日韩伦理在线免费观看| 超级碰碰不卡在线视频| 一区二区三区在线不卡| 青草全福视在线| 黄网页在线观看| 亚洲人成网站色在线观看| 亚洲一卡二卡| 欧美激情午夜| 亚洲视频在线一区二区| 手机看片日韩国产| 久cao在线| 亚洲猫色日本管| 人妻互换免费中文字幕| aa国产成人| 午夜精品免费在线观看| 91av资源网| 欧洲av不卡| 精品视频免费在线| 三级黄色片免费观看| 51精品国产| 亚洲国产精品va在看黑人| 91精品小视频| 精品国产乱码久久久久久蜜坠欲下| 夜夜躁日日躁狠狠久久88av | 成人羞羞在线观看网站| 亚洲精品中文字幕av| 国产精品高清无码在线观看| 成人激情视频| 欧美成人第一页| 国产无码精品在线观看| av地址在线观看| 欧美高清自拍一区| 久久亚洲精品小早川怜子| a看欧美黄色女同性恋| 天堂中文在线资| 国产精品麻豆一区| 亚洲中文字幕无码一区二区三区| 国产精品久久久久久久久| 欧美性xxxx极品hd欧美风情| 欧美精选一区二区| 日韩成人手机在线| 色戒汤唯在线观看| 欧美午夜精品久久久久久孕妇 | 欧美一级欧美一级在线播放| 色婷婷狠狠18禁久久| 日韩高清成人在线| 深夜福利一区二区| 久久黄色小视频| 久久一二三四| 91亚洲人电影| 深夜福利免费在线观看| 国产精品激情偷乱一区二区∴| 国产成人亚洲综合无码| 台湾成人免费视频| 日韩女优av电影| 男女做爰猛烈刺激| 真实国产乱子伦精品一区二区三区| 久久久久亚洲精品成人网小说| www.欧美色| 国产精品一区二区视频| 欧洲亚洲一区二区| 国产第一页在线| 欧美日韩一区久久| 亚洲精品女人久久久| 99久久久国产精品美女| 日韩免费av在线| 性生活视频软件| 国产精品成人在线观看| 久久久999免费视频| 麻豆视频久久| 色七七影院综合| 天天操天天摸天天干| 国产精品亚洲成人| 一区二区国产日产| 欧美aa视频| 亚洲国产高清自拍| 青青草免费av| 极品美女销魂一区二区三区免费| 欧美午夜视频在线| 亚洲欧美韩国| 精品国产伦一区二区三区观看体验| 精品女人久久久| 日韩精品高清不卡| 国产激情一区二区三区在线观看 | 国产精品天天看| 37pao成人国产永久免费视频| 午夜日韩影院| 九色精品免费永久在线| 国产特级黄色片| 一区二区中文字幕在线| 精品久久久99| 欧美韩国日本在线观看| 国产精品久久久久久搜索| 免费在线视频一级不卡| 天天色天天爱天天射综合| 中文字幕乱视频| 亚洲先锋成人| 51蜜桃传媒精品一区二区| gogogogo高清视频在线| 欧美一区二区视频网站| 加勒比婷婷色综合久久| 韩国精品免费视频| 国产又爽又黄ai换脸| 国产不卡精品| 欧美猛少妇色xxxxx| 亚洲精品喷潮一区二区三区| 亚洲成人精品一区| 少妇被狂c下部羞羞漫画| 亚洲人成久久| 久久av一区二区| 久久久久久久| 一区二区三区四区在线观看视频| 最近中文字幕av| 国产精品久久三| 91看片破解版| 男女性杂交内射妇女bbwxz| 国产三区四区在线观看| 精品国产乱码久久久久久天美| 97人妻精品一区二区三区免费| 在线观看不卡| 久久av免费观看| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲天堂网在线观看| 亚洲在线免费观看视频| 亚洲色图.com| 成年人小视频在线观看| 午夜在线观看免费一区| 亚洲图片小说在线| 国产在线不卡一区二区三区| 欧美激情欧美激情在线五月| 色欲久久久天天天综合网| 色综合久久久久| 亚洲欧洲综合网| 国产91丝袜在线播放九色| 国产特级黄色大片| 欧美一区二区性| 亚洲一区二区三| 在线看片福利| 久久九九全国免费精品观看| 亚洲av综合色区无码一区爱av| 疯狂做受xxxx高潮欧美日本| 美国美女黄色片| 国产精品99久久久久久久女警 | 日韩激情久久| 玖玖玖电影综合影院| 欧美一区二区三区四区在线| 亚洲精品传媒| 亚洲电影av在线| 综合久久中文字幕| 午夜精品福利在线| 少妇愉情理伦三级| caoporn国产精品| 日本不卡一区二区在线观看| 一区二区三区国产盗摄| 在线观看亚洲视频啊啊啊啊| 欧美黄色影院| 114国产精品久久免费观看| 羞羞影院欧美| 色综合视频一区中文字幕| av大全在线免费看| 亚洲国产精品嫩草影院久久| 91精品视频免费在线观看| 日韩欧美aaa| 久草国产在线视频| 国产精品麻豆99久久久久久| 亚洲一级中文字幕| 成人综合在线网站| 一区二区三区四区毛片| 三级不卡在线观看| 热99这里只有精品| 欧美伊人影院| 伊人狠狠色丁香综合尤物| 日韩有码av| 国产手机精品在线| 亚洲五码在线| 91色视频在线导航| 国产精品久久久久久吹潮| 欧美亚洲成人精品| 99久久精品免费看国产小宝寻花 | 色噜噜色狠狠狠狠狠综合色一| 精品一区二区男人吃奶| 成人av中文| 国语精品视频| 91久久久久久久久久| 成人在线视频观看| 国产精品国产三级国产aⅴ浪潮 | 国产日韩精品电影| 中文字幕av一区二区三区佐山爱| 91精品国产高清自在线看超| 国产网红在线观看| 欧美丰满老妇厨房牲生活| 国产黄网站在线观看| 久久久精品在线观看| 美女国产在线| 久久精品国产成人| 国产成人无吗| 欧美日韩福利视频| 日本成人不卡| 国内精品400部情侣激情| wwww亚洲| 97色在线视频观看| 色戒汤唯在线| 国产精品爱啪在线线免费观看| 日韩精品三区| 国产精品久久婷婷六月丁香| 成人日韩av| 成人免费网站在线看| 91成人精品观看| 亚洲free性xxxx护士hd| 亚洲国产aⅴ精品一区二区| 成人久久18免费网站漫画| 成人av影音| 免费日韩电影在线观看| 欧美裸体在线版观看完整版| 亚洲欧洲日韩精品| 综合在线一区| 欧美又粗又长又爽做受| 亚洲毛片网站| 欧美日韩大尺度| 另类小说欧美激情| 蜜桃视频无码区在线观看| 波多野结衣中文字幕一区二区三区| 国产精品伦子伦| 国产欧美日韩卡一| 亚洲精品一区二区三区在线播放| 亚洲另类一区二区| 五月天婷婷综合网| 91久久人澡人人添人人爽欧美| 在线亚洲欧美日韩| 日韩三级在线观看| 你懂的免费在线观看视频网站| 中文字幕国产亚洲| 日韩成人伦理| 清纯唯美亚洲激情| 国产在线不卡一区二区三区| 精品亚洲第一| 日韩欧美字幕| 国产不卡一区二区视频| 日本伊人色综合网| 国产精品偷伦视频免费观看了| 久久久久久9999| 国产97免费视频| 色一区在线观看| 精品久久久免费视频| 亚洲欧美国产日韩天堂区| 成人日批视频| 国产精品99一区| 伊人久久影院| 日韩免费中文专区| 激情另类综合| 免费成人黄色大片| 久久蜜桃香蕉精品一区二区三区| 91高清免费看| 在线观看国产一区二区| 丰满熟女一区二区三区| 中文字幕日韩高清| 欧洲一区精品| 亚洲综合成人婷婷小说| 国产一区二区三区站长工具| 日韩精品一区二区三区四| 免费高清在线视频一区·| 亚洲精品乱码久久久久久蜜桃图片| 中文字幕第一区二区| 国产精品suv一区二区三区| 日韩视频免费观看高清在线视频| 福利视频在线看| 91av成人在线| 国语一区二区三区| 欧美另类videosbestsex日本| 蜜臀av一区二区在线观看| 欧美色图亚洲激情| 亚洲一二三四久久| 国产手机精品视频| 中文字幕一精品亚洲无线一区 | 成人做爽爽免费视频| 国产精品美女久久久久久不卡| www.avtt| 高清在线观看日韩| 亚洲一级生活片| 欧美日韩视频在线第一区| 黄色国产在线| 国产mv久久久| 香蕉久久夜色精品国产更新时间 | 午夜少妇久久久久久久久| 欧美吞精做爰啪啪高潮| 国产综合视频一区二区三区免费| 2019亚洲男人天堂| 好吊妞视频这里有精品| 成人av在线播放观看| 国产精品资源在线看| 午夜激情福利网| 欧美男女性生活在线直播观看| 成人欧美一区| 国产精品久久久久久久久久久久久久| 亚洲自拍电影| 男人天堂网视频| 91久色porny| 午夜精品免费观看| 国产性色av一区二区| 视频在线日韩| 午夜午夜精品一区二区三区文| 日韩精品亚洲专区| 国产精品久久免费观看| 欧美三级视频在线播放| 午夜伦理在线| 91免费看片网站| 伊人情人综合网| 国产成人精品综合久久久久99| 亚洲综合在线免费观看| 免费观看的毛片| 91国内在线视频| 国内黄色精品| 国内自拍第二页| 亚洲一区自拍偷拍| 六月婷婷综合网| 欧美一级片一区| 日韩专区精品| 中文字幕一二三| 午夜精品久久久久久久99水蜜桃| 全色精品综合影院| 国产精品电影在线观看| 国产精品久久久乱弄| 日本中文字幕精品| 黄色一区二区在线| 国产中文在线观看| 91精品久久久久久久久久久久久久 | 波多野结衣亚洲| 亚洲成人a**址| 国产v日产∨综合v精品视频| 欧美特黄aaaaaa| 日韩一区二区三区国产| 超碰精品在线观看| 男人搞女人网站| 怡红院av一区二区三区| 四虎影视精品成人| 国产区精品在线观看| 黄色亚洲大片免费在线观看| 亚洲激情视频小说| 91精品国产aⅴ一区二区| 欧美调教sm| 亚洲最新免费视频| av网站免费线看精品| 一炮成瘾1v1高h| 97国产精品久久| 99精品视频在线观看播放| 无码人妻一区二区三区精品视频| 色呦呦网站一区| 三级资源在线| 亚洲va韩国va欧美va精四季| 成人性生交大片免费看视频在线 | 青青草原在线免费观看视频| 亚洲图片制服诱惑| av综合网站| 中文字幕第一页在线视频| 色偷偷成人一区二区三区91| 日本性爱视频在线观看|