5

モジュールを定義していて、Fooそれを別のモジュール内でインスタンス化していますBar。作成および変更されたものと同じインスタンスをOther提供したい3番目のモジュールがあります。FooBar

define('Foo', [], function() {
    var test = function() {
        this.foo = 'foo';        
    };

    return test;
});

define('Bar', ['Foo'], function(Foo) {
    Foo = new Foo();
    Foo.bar = 'bar';
    console.log('From bar', Foo);
});

define('Other', ['Foo'], function(Foo) {
    console.log('From the other', Foo);
});


require(['Foo', 'Bar', 'Other'], function(Foo, Bar, Other) {
    console.log('Bringing it all together');
});

http://jsfiddle.net/radu/Zhyx9/

require がなければ、私は次のようなことをします:

App = {};

App.Foo = function() {
    this.foo = 'foo';
}

App.Bar = function() {
    App.Foo = new App.Foo();
    App.Foo.bar = 'bar';
    console.log('From bar', App.Foo);
}

App.Other = function() {
   console.log('From other', App.Foo);
}

App.Bar();
App.Other();

http://jsfiddle.net/radu/eqxaA/

私はここで何かが欠けているに違いないことを知っています. . </p>

4

3 に答える 3

3

を使用してモジュールから公開するものreturnは、必要なモジュールでそのモジュールを表す引数からアクセスできます

これがあなたのデモです、修正されました

define('Bar', ['Foo'], function(Foo) {
    Foo = new Foo();
    Foo.bar = 'bar';

    //return instantiated Foo
    return Foo;
});


require(['Foo', 'Bar', 'Other'], function(Foo, Bar, Other) {
    //Bar is the instantiated Foo, exposed from Bar
    console.log(Bar);
});
于 2012-09-11T02:41:09.723 に答える
1

これを回答の1つにコメントとして投稿しましたが、次のようにインスタンスを共有できることに気付きました:

define('Foo', [], function() {
    var test = function() {
        this.foo = 'foo';        
    };

    return new test();
});

define('Bar', ['Foo'], function(Foo) {
    Foo.bar = 'bar';
    console.log('From bar', Foo);
});

define('Other', ['Foo'], function(Foo) {
    Foo.other = 'other';
    console.log('From the other', Foo);
});


require(['Foo', 'Bar', 'Other'], function(Foo, Bar, Other) {
    console.log('Bringing it all together');
});

http://jsfiddle.net/radu/XEL6S/

ただし、そもそもこれを行わなかった理由はFoo、DOM の準備が整っている必要があるため、モジュールがそれ自体をインスタンス化できなかったためです。しかし、RequireJS は初めてなので、この種の機能が に組み込まれていることを知りませんでした。つまり、上で指定したようにモジュールのインスタンスを共有するにはFoo、その定義でインスタンス化しdomReady、requireJS ドキュメントで指定されているようにモジュールを追加します。

于 2012-09-11T03:14:28.967 に答える
1

モジュールからの戻り値は、requirejs が公開された API と見なすものです。だからあなたのconsole.log発言はそれを混乱させています。

次のように、関数から何かを返す必要があります。

define('Bar', ['Foo'], function(Foo) {
    var Bar = { my: 'bar'};
    //or maybe return a function or whatever 
    return Bar;
 });
于 2012-09-11T02:34:42.450 に答える