javascript - 带有ajax的js中的OOP方法

标签 javascript ajax oop document-ready

... 嗨,我有一个对象:

function Page(daoService) {
    this.daoService = daoService;
    this.gamesList = this.daoService.getGamesList();
}

// Rendering thumbs for main page
Page.prototype.renderThumbs = function(idContainer){
    var container = document.getElementById(idContainer);
    for (var i = 0; i < this.gamesList.length; i++) {
        var thumbNode = document.createTextNode("<div class='thumbIcon'></div>");
        thumbNode.style.backgroundImage = Const.PATH_THUMBS + this.gamesList.gameTitleseo;
        container.appendChild(thumbNode);
    }
};

而且我的代码中也有使用这个对象的函数:

document.onreadystatechange = function() { 
    if (document.readyState == "interactive") { 
        // Initialization of elements
        // Setting global dao service
        var daoService = AjaxService();

        // Initialization for page object
        var page = new Page(daoService);
        page.renderThumbs("homePageContainer");
    } 
} 

这里的问题是,当我调用 page.renderThumbs 时,字段 this.gamesList 仍然没有初始化,因为它没有从服务器获得 ajax 响应。你能帮我处理我需要改变的方法吗?谢谢

最佳答案

您需要在 daoService 上设置 getGamesList 来处理异步方法。这是我的意思的粗略草图:

DaoService.prototype.getGamesList = function(callback) {

    var self = this;

    // Has the gamesList been populated by a previous call to this function?
    if (this.gamesList) {
        // The gamesList property has values, call the callback.
        callback(this.gamesList);
    }
    else {
        // The gamesList was not populated, make the ajax call.
        $.ajax('URL').done(function(data) {
            // Handle data coming back from the server.
            self.gamesList = data;
            callback(this.gamesList);
        });
    }


}

然后您可以使用从 renderThumbs 调用的 getGamesList 方法,如下所示:

Page.prototype.renderThumbs = function(idContainer){
    var container = document.getElementById(idContainer);

    // The anonymous function will be called whether the list was
    // already populated in daoService or an ajax call is made.
    this.daoService.getGamesList(function(gamesList) {
        for (var i = 0; i < gamesList.length; i++) {
            var thumbNode = document.createTextNode("<div class='thumbIcon'></div>");
            thumbNode.style.backgroundImage = Const.PATH_THUMBS + gamesList[i].gameTitleseo;
            container.appendChild(thumbNode);
        }
    });
};

关于javascript - 带有ajax的js中的OOP方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386131/

相关文章:

javascript - Backbone.js - 自定义从 "fetch()"返回的数据的组织

javascript - 通过 AJAX 从 PHP 后端加载菜单

java - 在 Java 中处理无效输入

javascript - 如何从javascript获取ajax Accordion 选择的索引

python - 当属性不存在时返回 None

java - 面向对象设计 - 法术

javascript - Sails.JS HTTP + HTTPS

javascript - 使用本地 Javascript 访问本地文件

javascript - 如何在 selenium 上检测带有原始窗口链接的 iframe 选项卡窗口

javascript - 为 .ajaxError() 中重新发送的 Ajax 请求执行 .done() 函数