我的this code (also shown below)在IE8中给我一个错误,但在Chrome和PhantomJS中很好。

错误是“对象不支持此属性或方法剔除2.2.1.debug.js,第2319行字符35”,这是从currentPage(pages[pages.indexOf(current) + steps]);调用的

我不知道为什么它不起作用,所以任何帮助将不胜感激!

var Page = (function () {
    function Page(index, name, canNavigateToPage, navigatedToThisPage) {
        this.index = index;
        this.name = name;
        this.canNavigateToPage = canNavigateToPage;
        this.navigatedToThisPage = navigatedToThisPage;
    }
    Page.prototype.navigateToPage = function () {
        if (this.canNavigateToPage()) {
            this.navigatedToThisPage(this);
        }
    };
    return Page;
})();

var AccountSearchParameters = (function () {
    function AccountSearchParameters() {
        this.reference = ko.observable();
        this.scheme = ko.observable();
        this.lastName = ko.observable();
        this.sufficientInputToSearchForAccount = ko.computed(function () {

            return this.reference() && this.scheme() && this.lastName();
        }, this);
    }
    return AccountSearchParameters;
})();

function viewModel() {
    var self = this,
        currentPage = ko.observable(),
        accountSearchParameters = new AccountSearchParameters(),
        forwardPageProgressionGuards = {
            '1': function canMoveToPage2() {
                return accountSearchParameters.sufficientInputToSearchForAccount();
            },
                '2': function canMoveToPage3() {
                return true;
            },
                '3': function canMoveToPage4() {
                return true;
            }
        },
        canMoveToNextPage = function (currentlyOnPage) {
            function disallowPageMovementNotExplicitlyDefined() {
                return false;
            }

            return (forwardPageProgressionGuards[currentlyOnPage] || disallowPageMovementNotExplicitlyDefined)();
        },
        canMoveToPreviousPage = function (currentlyOnPage) {
            return currentlyOnPage > 1;
        },
        pages = [
        new Page(1, 'Customer details', function () {
            return true;
        }, function (page) {
            currentPage(page);
        }),
        new Page(2, 'Bank details', forwardPageProgressionGuards['1'], currentPage),
        new Page(3, 'Payment details', forwardPageProgressionGuards['2'], currentPage),
        new Page(4, 'Confirmation', function () {
            return true;
        }, currentPage)],
        pageNavigator = function (canNavigate, steps) {
            current = currentPage();
            console.log(canNavigate(current.index));
            if (canNavigate(current.index)) {
                currentPage(pages[pages.indexOf(current) + steps]);
            }
        };

    currentPage(pages[0]);

    self.page = ko.computed(function () {
        return currentPage();
    });

    self.accountSearchParameters = accountSearchParameters;
    self.nextPage = function () {

        pageNavigator(canMoveToNextPage, 1);
    };
    self.previousPage = function () {
        pageNavigator(canMoveToPreviousPage, -1);
    };

    self.canMoveToNext = ko.computed(function () {
        return canMoveToNextPage(currentPage().index);
    });

    return self;
}

$(function () {
    ko.applyBindings(viewModel());
});

最佳答案

IE8中的indexOf不支持,请使用$ .inArray

关于javascript - TypeScript-使用ockout.js的JavaScript在IE8中不起作用-“对象不支持此属性或方法”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17024290/

10-09 23:36