我有一个问题,我不知道该如何进一步。

我有这样的东西。

function Paginator() {
    this.currentPage = 1;
};

Paginator.prototype.getCurrentPage = function() {
        return this.currentPage;
};

Paginator.prototype.getNextPage = function () {
    this.currentPage++;
    return this.getCurrentPage();
};

Paginator.prototype.getPreviousPage = function () {
    this.currentPage--;
    return this.getCurrentPage();
};

Paginator.prototype.setCurrentPage = function (page) {
    this.currentPage = page;
    return this.getCurrentPage();
};

Paginator.prototype.renderPage = function (page, data) {
    this.currentPage = page;
    this.pageList = [];
    for(i = 0; i < Math.ceil(75/12); i++)
    {
        this.pageList.push([i, (i-1)*12, i*12]);
    }
    for(i=this.pageList[page][1]; i < this.pageList[page][2]; i++) {
        var tmpl = "<article class='col-lg-3 col-md-4 col-sm-12 col-xs-12 video'><div class='video-image'><img class='img-responsive img' src='img/" + data[i].image + ".jpeg'><img class='player img-responsive' src='img/icon.png' width='75px' height='75px'></div><p class='video-title'><strong>" + data[i].title + "</strong></p><p class='video-timestamp'>" + data[i].timestamp + "</p></article>";
        $(".video-container").append(tmpl);
    }
};


这是我的分页对象。

当我调用paginator.getCurrentPage();时它将返回1,因为这是默认值。

但是,如果我调用renderPage(3,data);它应该为第3页呈现第3页的数据及其工作。问题在于,此渲染函数在另一个函数中调用,该另一个函数是ajax函数的回调:

Loader.prototype.load = function (url, callback, from, to) {
    //load JSON from url
    var xhr = new XMLHttpRequest();
    var self = this;

    xhr.onreadystatechange = ensureReadiness.bind(self);

    function ensureReadiness() {
        if (xhr.readyState < 4) {
            return;
        }
        if (xhr.status !== 200) {
            return;
        }
        // all is well
        if (xhr.readyState === 4) {
            var JSONObject = JSON.parse(xhr.responseText);
            (to) == "all" ? to = JSONObject.length : to;
            callback(JSONObject, from, to);
        }
    }
    xhr.open('GET', url, true);
    xhr.send('');
};

Cache.prototype.load = function(data, from, to) {
    this.data = data;
    paginator.renderPage(3, data);

};


一切正常,它加载正确的数据并显示它们,但是在脚本的底部,我有:

cache = new Cache();

paginator = new Paginator();

loader = new Loader();
loader.load("http://academy.tutoky.com/api/json.php",cache.load.bind(cache), 0, 30);


这应调用loader.load函数,该函数调用cache.load函数,该函数调用创建视图的paginator.renderPage函数,但也应将paginator.currentPage设置为renderPage函数参数中的某个值。它确实在paginator.renderPage函数的范围内,但是当我添加console.log(paginator.getCurrentPage());时。到整个脚本的底部,它将返回1,而不是page参数的值。

最佳答案

看来问题出在您登录页码之前,异步调用未完成。我已经将fiddle更新为将console.log包装在回调中,如下所示:

loader.load("http://academy.tutoky.com/api/json.php",test, 0, 30);

function test(data, from, to) {
    cache.load(data, from, to);
    console.log(paginator.getCurrentPage());
}


显然,您可能想看看改善我的命名! ; o)

10-06 07:32