问题:模块间如何传递参数。
描述,模块A有一变量a,点击页面的按钮后,a的值会改变,如何在模块B中访问到A.a。在模块B中,访问到的一直是A.a原来值。
我刚学习requireJS,请教一下~
A模块
define(['jquery'], function($){
var a = 1;
$('#seg_test').on('click',function(){
a = 2;
})
return {
a: a,
seg: function(){
}
}
});
B模块
define(['jquery', 'modules/seg'], function($, seg){
$('#test').on('click',function(){
debugger
console.log('in test:'+seg.a);
})
return {
test: function(){
}
}
});
这种,最好不去找模块是否支持参数传递之类的。模块其中一个要求就是隔离。
可以通过其他的方式来处理,比如给模块提供初始化操作(提供一个init,create之类的方法,甚至直接对外暴露为一个对象,要求使用者进行实例化)。
这样,你就可以将你需要的参数传递给模块内部进行处理。
楼主,其实你在export导出a的时候,导出的已经不是引用值了。而是一个数字,也就是说,你这么写:
return {
a: a,
seg: function(){
}
}
就等于这么写了:
return {
a: 1,
seg: function(){
}
}
因为你return的a并非引用型。如果你想在B模块儿中也可以更改A模块中的a变量的话,建议导出引用型变量。
lz试试这样呢?
A模块:
define(['jquery'], function($){
var obja = {
a: 1
};
$('#seg_test').on('click',function(){
obja.a = 2;
})
return {
obja: obja,
seg: function(){
}
}
});
B模块
define(['jquery', 'modules/seg'], function($, seg){
$('#test').on('click',function(){
debugger
console.log('in test:'+seg.obja.a);
})
return {
test: function(){
}
}
});