firefox说`this.view`是未定义的,但它在控制台中转储对象时明确定义

时间:2015-08-24 05:14:55

标签: javascript jquery prototype

http://puu.sh/jMqbJ/f035efa2da.png

我读了一篇关于通过创建单例来构建单例的文章,然后覆盖它们的构造函数并始终返回第一个创建的实例。这工作正常,但我的一个方法无法引用其属性:

//fetch a view and render it with the supplied args, then perform a callback.
jqMVC.prototype.render = function(template,args,callback){
    twig({
        href: this.view_path+template,
        load: function(template) { 
            var html = template.render(args);
            this.view.html(html).promise().done(function(){
                if(typeof callback === "function"){
                    callback();
                }
            });
        }
    });
};

正如您在图像中看到的那样,视图已经明确定义,如果程序员没有覆盖它,甚至还有一个默认值。 view是一个jquery对象。我怎样才能在我的方法中使用它?

1 个答案:

答案 0 :(得分:3)

问题出在twig回调this内,可能不是指jqMVC个对象。

您可以使用下面给出的闭包变量

jqMVC.prototype.render = function (template, args, callback) {
    var self = this;
    twig({
        href: this.view_path + template,
        load: function (template) {
            var html = template.render(args);
            self.view.html(html).promise().done(function () {
                if (typeof callback === "function") {
                    callback();
                }
            });
        }
    });
};