我应该如何让它发挥作用?
var param = 'someFunction';
require('views/MyView').[param]();
当我运行此代码时,我收到以下错误
SyntaxError: missing name after . operator
require('views/MyView').[renderMethod]();
答案 0 :(得分:3)
.
和[]
有点相同。
你想要的是require('views/MyView')[renderMethod]();
require(...)
将返回导出的模块,该模块基本上应该是具有属性函数的对象。
所以,让我们说:
var obj = {
foo: function() { alert('foo'); }
bar: function() { alert('bar'); }
}
然后你可以这样做:
obj.foo();
- 调用固定名称函数
obj['foo']();
- 动态名称固定参数
obj['foo'].apply(this, args)
- 动态函数名称和参数。
编辑:
我注意到了另外一件事:
在requirejs中,当你做这样的事情时:
define (require, function() {
x = require('views/Foo');
x.bar();
}
RequireJS将通过解析您需要'view / Foo'模块的代码来确定,并确保在执行代码之前加载它。
但是如果你想加载一个动态模块,它不会事先知道要预加载哪个模块,所以你必须使用一个回调来在你的模块被加载时得到通知:
define (require, function() {
require('views/' + viewName, function(myView) {
myView.bar(); // or
myView[dynamicFunc](); // ...
});
}