【问题标题】:JQuery getScript() calling anonymous function from curl.js moduleJQuery getScript() 从 curl.js 模块调用匿名函数
【发布时间】:2013-11-01 07:49:54
【问题描述】:

我有一个 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() 但是 Dog 不会是一个模块,因为我将拥有私有属性,并且它也将绑定到全局范围。

似乎 $.getScript() 没有将调用脚本的返回值绑定到任何可从 getScript() 的回调函数访问的变量;至少我找不到。它确实返回数据,但这只是调用的脚本的文本。我确实找到了一个作弊器,我可以获取返回的脚本并通过eval() 运行它。奇怪的是,这几乎正是 $.getScript() 方法本身所做的。将 Stupid 方法重写为以下代码:

"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?

【问题讨论】:

    标签: javascript jquery curl module anonymous-function


    【解决方案1】:

    如果一旦你使用 curl.js 可能最好忘记 JQuery.getScript() 阅读 curl 的 wiki!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多