国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

在YII中使用RequireJS

2020-03-22 19:09:55
字體:
來源:轉載
供稿:網友
  • RequireJS 是一個非常小巧的 JavaScript 模塊載入框架,是 AMD 規范最好的實現者之一。而YII則是目前最熱門的PHP MVC框架了,下面主要分享如何在YII中使用RequireJS

    使用registerScriptFile 引入RequireJS
    在action代碼里通過registerScriptFile加載所有的JS代碼,代碼如下:

    //deploy js directory of require modules and return a reference to location$js = Yii::app()->assetManager->publish(  Yii::getPathOfAlias('application.components.js.requireModules'));//加載其它代碼Yii::app()->clientScript->registerScript( 'requiredScript', 'require.config({baseUrl: "' . $js . '",waitSeconds: 15});require( ["module1","module2"], function() {    //start doing things once modules have loaded });', CClientScript::POS_END );

    以上的代碼還可以進一步優化,那就是將配置代碼放到一下公共的JS文件里,然后載入該公共文件,這種方法不好的地方是似乎沒有辦法使用RequireJS 的data-main屬性。

    在模板文件里載入RequireJS
    YII中的Views模板文件其實就是一個HTML文件,所以我們就可以像在普通HTML文件里一樣使用RequireJS。


    <script data-main="scripts/main" src="scripts/require.js"></script>

    如果要在RequireJS里引入非AMD的模塊,如underscore, jQuery 插件等,則需要用到RequireJS的shim配置,而通過Shim進行配置的模塊在所有的調用之前進行配置,所以我們通過將RequireJS的配置代碼放在main.js中。但是通常每個頁面都有自己的代碼要執行,所以我們在data-main邊上加個非標準的屬性data-start,它的值就是當前頁面里需要執行的模塊。

    <script data-main="scripts/main"data-start="scripts/page1,scripts/common" src="scripts/require.js"></script>

    然后我們在main.js里遍歷該屬性,取得模塊列表,分別用require方法載入進來。例如我們項目里的每個模塊都有個init方法,所以我們就遍歷調用所有模塊的init方法。

    這里再強調一下:data-start是我們自定義的屬性,用來表示該頁面需要初始化的模塊,你可以使用任何名稱。它的值是一個字符串,多個模塊使用逗號隔開,然后在代碼中把它解析成一個數組。

      // load module for each page  var startModules = $("script[data-main][data-start]").attr("data-start").split(',');  _.each(startModules, function (module) {    require([module], function(moduleObj) {      if (moduleObj && moduleObj.init) {        moduleObj.init();      }    });      });


    下面是完整的main.js里代碼示例:


      requirejs.config({    "baseUrl": "js/lib",    "paths": {      "app": "../app"    },    "shim": {        "html' target='_blank'>jquery.alpha": ["jquery"],        "jquery.beta": ["jquery"]    }});// load module for each pagevar startModules = $("script[data-main][data-start]").attr("data-start").split(',');_.each(startModules, function (module) {  require([module], function(moduleObj) {    if (moduleObj && moduleObj.init) {      moduleObj.init();    }  });  });

    其實以上的用法不限于YII,幾乎可以在任何項目中使用。


    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 卫辉市| 宜良县| 江口县| 旌德县| 西充县| 进贤县| 闸北区| 博爱县| 虎林市| 碌曲县| 拜城县| 南昌市| 会昌县| 万宁市| 平舆县| 新巴尔虎左旗| 紫阳县| 视频| 济南市| 方正县| 马鞍山市| 柳林县| 昌乐县| 乃东县| 台安县| 浮梁县| 新和县| 通城县| 翁牛特旗| 陵川县| 崇左市| 民丰县| 东山县| 阜平县| 齐河县| 汕头市| 昆山市| 白银市| 永川市| 无为县| 丰台区|