2015-02-11 103 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