2015-09-05 103 views
2

我需要在我的模塊被加載到加載CSS,所以我做了這樣的使用墊片:有requirejs運行回調時模塊加載

function loadCss(url) { 
    var link = document.createElement("link"); 
    link.type = "text/css"; 
    link.rel = "stylesheet"; 
    link.href = url; 
    document.getElementsByTagName("head")[0].appendChild(link); 
} 

requirejs.config({ paths: paths, shim: { 
    'easyzoom': { 
     'deps': ['jquery'], 
     init: function() { loadCss('/lib/easyzoom/css/easyzoom.css'); } 
    }} 
}); 

它適用於其他圖書館一樣的數據表,因爲它們是非Amd模塊。但是對於Amd模塊,requireJs不尋找墊片,所以不會引發我的init函數。

是否有任何方式來加載模塊後調用回調?或者加載一個Amd模塊,因爲它是一個普通的JavaScript文件,可以找到墊片?

回答

2

爲合適的AMD模塊(調用define的模塊)定義shim會導致未定義的行爲。

你可以做的是使用map如下:

map: { 
    '*': { 
     easyzoom: 'easyzoom-intercept' 
    }, 
    'easyzoom-intercept': { 
     easyzoom: 'easyzoom' 
    } 
} 

這樣做是指定在任何模塊('*')要求的模塊easyzoom,模塊easyzoom-intercept應改爲加載。但是,easysoom-intercept想要加載easyzoom時,應加載模塊easyzoom。然後創建一個easyzoom-intercept模塊是這樣的:

define([easyzoom], function (ez) { 
    loadCss('/lib/easyzoom/css/easyzoom.css'); 
    return ez; 
}); 

此代碼將盡快easyzoom加載執行。

+0

謝謝!爲加載CSS需求-CSS是好的,但你的答案是完美的我的問題。 – yeska