3

我正在为我们的一个项目构建一个实时主题选择器,它可以工作。那太棒了!但是我还有一个错误,我无法解决,这让我发疯。

这就是问题所在:在您加载主题选择器页面的那一刻,主干应用程序(它使用 Backbone JS、Underscore JS 和 jQuery 构建)启动。在初始化时,应用程序会查找几件事,其中一件事是:我需要为当前主题使用什么颜色集(当前主题设置存储在数据库中)。

这是在初始化时调用的函数:

    // Select the colorset for the first time a new theme is picked
    selectColorset: function( newTheme ) {
        // Check or this is a new theme or not
        var themeCheck = ( typeof newTheme !== "undefined" ) ? true : false,
            colorset = ( !themeCheck ) ? parseInt( $("#js-colorset-input").val() , 10 ) : 0;

        // Select the right list
        $("#js-theme-colors ul").eq( colorset ).addClass("selected-set");
        this.renderColorStyle( colorset );
    }

如您所见,此功能有两种使用方式:第一种是初始化,另一种是切换到其他主题。

首先我查了一下:为什么要调用这个函数?它是在更改事件上调用,还是在初始化时调用。如果在初始化时调用它,newTheme 变量将不会保存任何数据。

初始化时,颜色集编号将是页面上隐藏字段中的数字。所以现在我们有了颜色集编号,我们可以渲染颜色集样式表(this.renderColorStyle(colorset)):

    // Insert the color stylesheet
    renderColorStyle: function( colorset ) {
        // Check or the colorset is given
        if( typeof colorset === "undefined" || colorset === "" ) {
            colorset = 0;
        }

        // Define the stylesheet for this theme
        if( $("#js-theme-iframe").contents().find("#js-theme-colorset").length > 0 ) {
            // Change the current stylesheet
            $("#js-theme-iframe")
                .contents()
                .find("head #js-theme-colorset")
                .attr("href", "stylesheets/themes/theme-" + this.themeID + "/theme-color-" + colorset + ".css");
        } else {
            // Insert a new stylesheet
            var stylesheet = $("<link />", {
                href: "stylesheets/themes/theme-" + this.themeID + "/theme-color-" + colorset + ".css",
                rel: "stylesheet",
                id: "js-theme-colorset"
            });

            // Append the stylesheet to the iframe
            $("#js-theme-iframe").contents().find("head").append( stylesheet );
        }
    }

正如你所看到的,我首先检查或者我们有一个颜色集(只是为了确定),因为我们在初始化时没有颜色集样式表,所以我们要构建一个。这是用 jQuery 完成的。如您所见,我正在使用 href、rel 和 id(用于查找颜色集样式表)构建元素。

但是jQuery在初始化时一直给我一个空数组。所以样式表不在那里。所有数据都在那里,当我使用console.log()函数查看或数据真的在那里时,结果证明它是。所以不是这样。

但我真的不知道为什么会这样。因为如果我在主题更改时调用这些函数,一切正常,jQuery 创建样式表。所以只有在初始化时它不起作用,它让我发疯。

希望有人可以向我解释每次调用完全相同的函数是如何可能的,但是在初始化时,它有一个不同于主题更改的输出(具有相同的数字和变量)。

4

1 回答 1

0

整个问题是:我什至在初始化 iFrame 之前就调用了 selectColorset()。感谢@Leandro,我发现这是我的错误。谢谢您的帮助!

于 2012-11-29T12:14:35.527 回答