Javascript OOP构造函数使用ajax初始化数据 - 在原型中不可用

时间:2014-02-21 17:02:48

标签: javascript jquery ajax oop

我在实现一个javascript类时遇到问题,其构造函数由ajax调用填充。从文件中读取数据并以异步方式正确填充类属性。以下代码可以正常使用:

function Pattern(file){

    this.pattern = new Array();

    $.ajax({
        type: 'GET',
        url: file,
        dataType: 'text',
        context: this,
        success: function (data){
            ...
            this.buildPattern(data);
        },
        error: function (jqXHR, textStatus, errorThrown){
                alert('Problem loading file \'' + file + '\'');
        }
    });
}

Pattern.prototype.buildPattern = function(pattern){
    do{
        ...
        this.pattern[i][j] = pattern[i][j];
        ...
    }while(pattern[k] != '!');
}

在实例化类之后访问另一个方法时会出现问题:

Pattern.prototype.getPattern = function(number){
    ...
    return this.pattern;
}

使用此代码:

var pattern1 = new Pattern('filename.ext');
var myPattern1 = pattern1.getPattern(1);

由于在类中初始化我的属性的异步方法,在类创建之后调用方法getPattern()会返回一个空结果,因为this.pattern尚未完成加载和后处理。

我知道存在jQuery对象Deferred和Promise但是我没有使用javascript和类找到它们的任何实现。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

很抱歉写这个作为答案,而不是评论,我的平板电脑暂时不会让我写评论。

我只是觉得你可能会触发一个事件(可能使用PubSub)并将使用该类的代码放在一个EventHandler函数中,该函数在完全加载类后触发。