我正在构建一个 jQuery 插件,它允许用户使用自定义主题,称为选项,如下所示:
$('element').myFunction({
theme: '/path/to/theme'
});
主题包含一个文件theme-info.json
,其中包含主题的名称,以及一些其他元数据,并在插件初始化时被插件读取:
{
"name": "themeName",
"author": "authorName"
}
我想做的是填充插件的默认选项,使用主题中 json 文件中的一组插件选项,以便在调用函数时可以覆盖它们,就好像它们已经像这样硬编码:
$.fn.myFunction = function (options) {
var defaults = {
theme: '/default/theme/path',
themeOptions: {
// values called from json
option1: 'value1',
option2: 'value2'
}
}
}
然后用插件调用:
$('element').myFunction({
theme: '/path/to/theme',
themeOptions: {
option1: 'value1',
option2: 'value2'
}
});
实际上是否可以通过这种方式将 JSON 文件读入默认值?如果是这样,它是如何完成的?
更新
玩得更远一点,我设法得到了一些回报,但我正在努力用它做任何事情。这是获取主题元数据和选项的 AJAX 调用:
$.ajax({
url: defaults.theme + 'theme-info.json',
type: 'GET',
dataType: 'json',
async: false,
success: function(data) {
themeName = data.name;
var data = $.extend(true, defaults, data);
var options = $.extend(true, defaults, options);
}
});
然后我用
act.prepend('<script>
var parts = \'[' + JSON.stringify(defaults.themeOptions) + ']\';
var themeOptions = $.parseJSON(parts);
var themeOptions = themeOptions[0];
</script>');
在目标容器顶部打印以下内容
var parts = '[{"backgroundColor":"#FF5859","testVar":"Tada!"}]';
var themeOptions = $.parseJSON(parts);
var themeOptions = themeOptions[0];
然后在主题中,我可以使用themeOptions.backgroundColor
从 JSON 加载值的变量。但是,调用插件时用户定义的选项不会覆盖 JSON 中的默认值。有任何想法吗?