requireJS - 参数替换

时间:2012-08-28 13:14:57

标签: backbone.js requirejs

我应该如何让它发挥作用?

var param = 'someFunction';

require('views/MyView').[param]();

当我运行此代码时,我收到以下错误

SyntaxError: missing name after . operator
require('views/MyView').[renderMethod]();

1 个答案:

答案 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](); // ... 
    });
}