我正在开发一个jQuery插件,它假装自动根据用户的浏览器语言来翻译页面上的元素。翻译将存储在.json文件中。如何返回将解决几个函数的结果?
当你调用插件,你传递一个包名(或它们的阵列),然后它会尝试加载语言文件以下列方式:
- 如果浏览器的语言很简单,例如
'en'
,你只表明一个包,它会尝试加载以下:packageName-en.json
- 如果浏览器的语言组成,例如“EN-US”它会尝试加载和以前一样,但有:
packageName-en.json
ANDpackageName-en-US.json
- 如果显示了多个包,它将尝试按照每个包的前两个路径之一进行操作。
所以,在插件我有这样的:
$.fn.Translator = function(pkg, options){
Translator.initialize(pkg, options).done(function(){
return this.each(Translator.translate);
});
};
所以,在我的初始化函数的地方,我有这样的:
loadLanguages : function(){
$.each(self.options.packages,function(i, pkg){
});
}
这将调用这个函数:
getLanguage : function(pkg, language){
var self = this, url;
if (self.options.path)
url = self.options.path + '/';
url += [pkg, language].join('-');
return $.ajax ({
url : url,
dataType : "json",
cache : self.options.cache
});
}
问题是,由于该函数将被称为probabl y多次,我不知道如何让initialize
返回一个承诺,一旦所有的函数被调用,这个承诺将被解决。
虽然我接受了一个答案,但我认为你更好。这是我寻找的解决方案,而另一种方式似乎有点骇人听闻。非常感谢Julian :) – 2012-04-20 07:19:52