0

小さな Spotify アプリを開発しようとしていますが、いくつか問題があります。Foo別のファイルに保持し、メイン ファイルで必要とするオブジェクトがあります。次に、メイン ファイルで次のようなオブジェクトを作成しますvar baz = new Foo(some, arguments)。しかし、私はそれを機能させることができません。

私は 1.0 バージョンの API を使用していますが、Spotify は何らかの形で requirejs を使用していますよね?

例: https://github.com/spotify/apps-tutorial/blob/1.0/js/tutorial.js

そこで、foo.js と main.js の 2 つのファイルを使って、このようにしてみました。

// main.js
require([
  '$api/models',
  'foo'], function(models, Foo) {

  var f = new Foo("hello", "world");

  ...
});

// foo.js
// define() doesn't work? So I tried with require again...?!
require(['$api/models'], function(models) {

  function Foo(some, arg) {
    this.some = some;
    this.arg  = arg;
  }

  Foo.prototype.getSome() { return this.some; }


  return Foo;

});

これにより、実行時にメインファイルに「オブジェクトは関数ではありません」というエラーが表示されますnew Foo(..)

何故ですか?foo.js で require() を使用しているからだと思いますか? その場合、代わりに何を使用すればよいですか?

編集:わかりましたので、次のように使用する必要があるようですexportsexports.myMethod = myMethod;

しかし、その後、Foo オブジェクトのインスタンスを作成して返すメソッドと、そのすべてのインスタンス メソッドなどをエクスポートする必要があります。

4

1 に答える 1

0

私はこれを行うことでそれを解決しました:

//foo.js
require(['$api/models'], function(models) {

  var Foo = (function() {
    var foo = function(some, arg) {
        // Do stuff..
    };
    return foo;
  })();

  exports.Foo = Foo;
});

次に、main.js で次のように要求します: require(['scripts/foo#Foo']...

正常に動作するようです。ただし、それが最善のアプローチであるかどうかはわかりません。

于 2013-07-26T20:50:12.627 に答える