0

これをどのように機能させる必要がありますか?

var param = 'someFunction';

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

このコードを実行すると、次のエラーが発生します

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

1 に答える 1

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](); // ... 
    });
}
于 2012-08-28T13:29:20.463 に答える