Spotify app,创建自定义模块

时间:2013-07-26 19:59:25

标签: javascript spotify

我正在尝试开发一个小型Spotify应用程序,但有一些问题。我有一个对象Foo,我希望将其保存在一个单独的文件中,并且需要在我的主文件中。然后在我的主文件中,我想创建这样的对象:var baz = new Foo(some, arguments)。但我无法让它发挥作用。

我正在使用API​​的1.0版本,Spotify以某种形式使用requirejs,对吗?

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

所以,我尝试使用两个文件foo.js和main.js这样做。

// 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()?那我应该用什么呢?

编辑: 好的,所以我似乎应该使用exports,例如:exports.myMethod = myMethod;

但是我需要导出一个方法来创建并返回一个Foo对象的实例及其所有实例方法等,对吗?

1 个答案:

答案 0 :(得分: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中我需要这样: 要求([ '脚本/富#富'] ...

似乎工作正常。不知道这是不是最好的方法。