2015-02-11 101 views
0

之間更新的數據這是我第一次考慮requirejs。我一直在通過移植我的一箇舊項目來做到這一點。到目前爲止,它進展順利。到現在。RequireJS:如何通過模塊

我一直在做的是保持一個站點設置對象包括系統設置,如窗口高度,窗口寬度,文件的高度,scrollTop的等在那裏,我更新了調整大小的值,然後滾動事件。這些都是我可以訪問的全局變量。

例如(使用jQuery)

var mySettingsObject = {}; 
 
mySettingsObject.Init = function() { 
 
    this.winWidth = $(window).width(); 
 

 
    $(window).resize(function(e) { 
 
    mySettingsObject.winWidth = $(window).width(); 
 
    }); 
 
}; 
 

 
$(document).ready(function) { 
 
    mySettingsObject.Init(); 
 
});

現在我可以從任何功能隨時調用mySettingsObject.winWidth訪問該變量,它將始終是最新的。

什麼我想了解的是我怎麼能使用requirejs模塊依賴具有相同的行爲呢?

這是我的兩個模塊爲例

define('system', function() { 
 
    // Window settings 
 
    var winWidth = $(window).width(); 
 
    $(window).resize(function(e) { 
 
    winWidth = $(window).width(); 
 
    } 
 

 
    return { 
 
    winWidth: winWidth 
 
    }; 
 
\t \t 
 
}); 
 

 

 
// (is run on dom load) 
 
define('myModule', ['system'], function(system) { 
 
    $(window).on('resize', function() { 
 
    if (system.winHeight === xyz) { 
 
     // do something 
 
    } 
 
    }); 
 
});

的system.winHeight按預期工作,給我窗口的高度,因爲它是在DOM負荷。現在,如果我調整瀏覽器,我怎麼能有Mymodule中,即內部變量更新本身我怎樣才能使這兩個模塊進行通信。

+0

你開始你的問題談論寬度和結束談論身高。你打算談論整個寬度,不是嗎? – Louis 2015-02-11 17:26:16

+0

是的,我做了:)但是,寬度,高度,在這種情況下,它真的是一樣的。 – Patrik 2015-02-11 19:37:38

回答

1

你可以指定稱爲exports要導出到一個對象的值,在這裏,並在此對象上更新相應的字段更新新的價值觀:

define('system', function() { 
    // Window settings 
    var exports = {}; 
    exports.winWidth = $(window).width(); 
    $(window).resize(function(e) { 
    exports.winWidth = $(window).width(); 
    } 

    return exports;  
}); 
+0

謝謝,我會看看那個解決方案時,我回來在電腦後面。 – Patrik 2015-02-11 19:58:50

+0

這正是我所期待的。很簡單。謝謝! – Patrik 2015-02-11 20:33:58