【问题标题】:Spotify app, create custom modulesSpotify 应用,创建自定义模块
【发布时间】:2013-07-26 19:59:24
【问题描述】:

我正在尝试开发一个小型 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 这两个文件来这样做。

// 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 对象的实例及其所有实例方法等,对吗?

【问题讨论】:

    标签: javascript spotify


    【解决方案1】:

    我通过这样做解决了它:

    //foo.js
    require(['$api/models'], function(models) {
    
      var Foo = (function() {
        var foo = function(some, arg) {
            // Do stuff..
        };
        return foo;
      })();
    
      exports.Foo = Foo;
    });
    

    然后在 main.js 我需要这样的: 要求(['scripts/foo#Foo']...

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

    【讨论】:

    • 没关系,虽然在你的例子中, Foo 的值是 foo 函数。像往常一样编写你的函数就足够了,并将你想要公开的函数分配给exports
    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2012-10-03
    • 2017-05-30
    相关资源
    最近更新 更多