2013-07-26 38 views
0

我試圖開發一個小Spotify應用程序,但有一些問題。我有一個對象Foo,我想保留在一個單獨的文件,並在我的主文件中需要。然後在我的主文件中,我想要創建如下對象:var baz = new Foo(some, arguments)。但我無法讓它工作。Spotify應用程序,創建自定義模塊

我使用API​​的1.0版本,Spotify以某種形式使用requirejs,對吧?

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

所以,我試圖做這樣用兩個文件,foo.js和main.js.做new Foo(..)

// 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; 

}); 

這給了我一個錯誤「對象不是一個函數」中的主文件。

這是爲什麼?我想這是因爲我在foo.js中使用require()?那我應該用什麼呢?

編輯: 好了,看來我應該使用exports,如:exports.myMethod = myMethod;

但後來我需要導出創建和其所有的實例方法等返回一個Foo對象的實例的方法, 對?

回答

0

我解決它通過這樣做:在main.js然後

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

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

    exports.Foo = Foo; 
}); 

我需要這樣的: 要求([ '腳本/富#富'] ...

似乎工作好,不知道它是不是最好的辦法

+0

沒問題,雖然在你的例子中,Foo的值是foo函數,它足夠用於像往常一樣編寫你的函數,出口'你想要公開的。 –