Javascript 在XUI JS框架插件中公开公共方法?
我已经为XUI创建了一个插件,例如:Javascript 在XUI JS框架插件中公开公共方法?,javascript,mobile,javascript-framework,xui,Javascript,Mobile,Javascript Framework,Xui,我已经为XUI创建了一个插件,例如: xui.extend({ myPlugin : function(){ var options = []; function methodOne(obj){ } function methodTwo(){ } } }); 现在我可以打电话: <script type="text/javascript"> xui.ready(function
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, 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的东西,但当然不依赖于megajquery,也不依赖于XUI。我有一个处理页面导航的方法,可以处理“页面”转换,但我还需要能够以编程方式触发该方法
也许以上内容会帮助其他XUI人员,它目前正在为我工作,但可能会有所改进?利亚姆更有用的可能是了解您希望这样做的原因?您始终可以通过回调公开函数
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>
这是未经测试的,但应该可以工作。实际上很有用,因为某些mu方法确实需要添加回调,但我并没有像描述中那样有用。。。我需要能够静态地调用插件中的一些方法,即不在对象上调用。我将编辑我的答案,因为我可能已经找到了一种方法,尽管它并不优雅……您可以在xui.extend之外编写myPlugin函数,然后将其传递给xui.extendmyPlugin。这样你就可以自己使用它,作为一个插件,我仍然不明白你为什么需要在插件之外访问它。刚刚编辑了我的原始问题,但是现在你的建议很有意义!
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>