我已经为XUI创建了一个插件,例如:
xui.extend({
myPlugin : function(){
var options = [];
function methodOne(obj){
}
function methodTwo(){
}
}
});
现在我可以打电话给:
<script type="text/javascript">
xui.ready(function(){
// call my plugin on an XUI object
x$('element').myPlugin();
});
</script>
但是我还需要能够访问插件中的某些方法,就像这样(这段代码不起作用,但是说明了我正在努力实现的目标)
<script type="text/javascript">
xui.ready(function(){
// call my plugin on an XUI object
x$('element').myPlugin();
var foo = bar;
// call one of my methods?
xui.fn.myPlugin.methodOne(foo);
});
</script>
任何对XUI移动框架有更多经验的人都可以伸出援手吗?干杯
编辑**
下面的作品,虽然它可能不是很优雅...
xui.extend({
myPlugin : function(){
// create an API object
var api = {
'publicOne' : function(obj){
return methodOne(obj)
}
};
// add our API object to prototype
xui.fn.myPlugin.api = api;
/**
* the functions of the plugin
**/
// we'll expose this in the API object
function methodOne(obj){
// Do something with obj...
}
function methodTwo(){
}
}
});
然后在页面上我可以使用它:
<script type="text/javascript">
xui.ready(function(){
// call my plugin on an XUI object, which does its thing
x$('element').myPlugin();
// arbitary
var foo = x$('#bar');
// call one of the methods statically
xui.fn.myPlugin.api.pluginOne(foo);
});
</script>
为了解释这个目的,我正在创建与JQTouch非常相似的东西,但是当然不依赖于大型jQuery并且仅位于XUI之上。我有一个用于处理页面导航的方法,该方法可以处理“页面”转换,但是我还需要能够以编程方式触发该方法。
上面的内容也许会对其他XUI使用者有所帮助,它目前正在为我工作,但可能会有所改善?
最佳答案
Liam可能更有用的可能是了解您要这样做的原因?您总是可以通过回调公开该函数。
xui.extend({
myPlugin : function(callback){
var options = [];
function methodOne(obj){
}
function methodTwo(){
}
if(typeof callback === 'function') {
return callback(this);
}
}
});
然后这样称呼它:
<script type="text/javascript">
xui.ready(function(){
// call my plugin on an XUI object
x$('element').myPlugin(function(myPublic) {
var foo = bar;
// call one of my methods?
myPublic.methodOne(foo);
});
});
</script>
这未经测试,但应该可以。