2013-10-23 40 views
2

我有一個Curl.js模塊定義爲:JQuery的getScript加入()調用從curl.js模塊匿名函數

define("Portfolio", ["jquery"], function(jquery) { 
var $ = jquery; 

var Portfolio = (function() { 
    $("#output").text("Getting Stuff"); 
    var name = ""; 
    var holdings = []; 

    return { 
     "stupid": function() { 
      $.getScript("app/myScript.js", function(dog) { 
       //var dog = new Dog(); 
       dog.speak(); 
      }).fail(function(jqxhr, settings, exception) { 
       console.log(exception); 
      }); 
     } 
    } 
})(); 

return Portfolio; 
}); 

/app/myScript.js看起來是這樣的:

(function() { 

var breed = "Poodle"; 
return { 
    speak: function() { 
     alert("Woof"); 
    } 
}; 
})(); 

我我打電話Chrome中的「愚蠢」從控制檯方法如下:

curl(['Portfolio'], function(Portfolio){ 
Portfolio.stupid(); 
}); 

和Chrome說:

Uncaught TypeError: Object (function() { 

var breed = "Poodle"; 
return { 
    speak: function() { 
     alert("Woof"); 
    } 
}; 
})(); has no method 'speak' 

在myScript.js我可以使用var Dog = (function(){....})();哪些工作,但我不想污染全局命名空間的方式。

我也可以使用function Dog(){....},並在我的getScript回調使用new Dog().speak()但不會是一個模塊,因爲我會擁有私有屬性,它也將被綁定到全局範圍。看起來$ .getScript()不會將腳本的返回值綁定到任何可以通過getScript()的回調函數訪問的變量。至少沒有我能找到。它確實會返回數據,但這只是所調用腳本的文本。我確實發現了一個作弊行爲,我可以將返回的腳本通過eval()運行。奇怪的是,這幾乎就是$ .getScript()方法本身的功能。將愚蠢的方法修改爲以下代碼:

"stupid": function() { 
    $.get("/app/myScript.js", function(Dog) { 
     var dog = new (eval(Dog)); 
     console.log("Breed:" + dog.getBreed()); 
     d.setBreed("Lab"); 
     console.log("Breed: " + dog.getBreed()); 
    }); 
} 

這確實有效,但它感覺有點詭異和錯誤。

如何使用getScript()調用寫爲模塊或匿名自執行函數的/app/myScript.js,然後調用其中一個返回的函數? getScript應該執行我認爲的腳本,正如我寫的那樣,將對象返回給getScript返回對象,然後我可以調用它?很明顯,我在這裏錯過了一些東西。

爲什麼你不工作的Javascript?

回答

1

如果一旦你使用curl.js也許最好忘記JQuery.getScript() 閱讀curl的wiki!