我正在为我们的项目构建一个实时主题选择器,它的工作原理。那很棒!但我还剩下一个虫子,我无法解决,这让我发疯了。
这就是问题:在您加载主题选择器页面的那一刻,骨干应用程序(它是使用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创建样式表..所以只有在初始化它不起作用,它让我疯了..
希望有人可以解释我每次调用完全相同的函数是怎么可能的,但是在初始化时它有另一个输出(具有相同的数字和变量)而不是主题更改..
答案 0 :(得分:0)
整个问题是:在我初始化iFrame之前,我调用了selectColorset()。感谢@Leandro,我发现,那是我的错。谢谢您的帮助!