2012-03-06 55 views
1

我使用本教程创建自定义的PhoneGap插件: http://wiki.phonegap.com/w/page/36753496/How%20to%20Create%20a%20PhoneGap%20Plugin%20for%20iOS自定义PhoneGap的插件(IOS)功能问题

我已经使用了作者的例子取得了成功,但我有没有去过的几个问题能够找出答案。

当创建JavaScript函数,代码:

var MyPlugin = { 

    nativeFunction: function(types, success, fail) { 
      return PhoneGap.exec(success, fail, "PluginClass", "print", types); 
    } 
}; 

有没有一种方法来设置此不var MyPlugin = {...};nativeFunction?换句话说,我们可以这样定义myfunc = function()...

其次我们的插件的功能,假设有一种方法可以做到上述情况,可以此代码:

MyPlugin.nativeFunction(
     ["HelloWorld"] , 
     function(result) { 
      alert("Success : \r\n"+result);  
     }, 
     function(error) { 
      alert("Error : \r\n"+error);  
     } 
); 

(这是测试代码来测试插件)也可以用更标准化的方式编写?也就是说,只需调用Javascript函数而不需要nativeFunction部分?

我非常感谢任何输入,谢谢!

回答

1

插件的phonegap文档很烂。老实说,我试图创建自己的时候遇到了一堆问题。一些提示:

之所以这样做

var MyPlugin = {}; 

是因为这让我们给我们具体到JS对象范围内的事情。 例如:

MyPlugin.myFunction(); 

我最喜欢的方法来创建插件,类似你的问题,是原型他们

var MyPlugin = {}; // our object 

MyPlugin.prototype.myFunction = function(success,fail,types){ 

} 

来制作一个插件火,关键是这样的 -

PhoneGap.exec(success,fail,"MyPlugin","myFunction",types); 

但是他们遗漏的是,如果我们想为我们的插件提供选项,该怎么办?如果我们想要做比传递一个字符串更多的东西,那么这个例子不起作用。修复很简单,但根本没有提及。

var MyPlugin = {}; 
MyPlugin.prototype.myFunction = function(success,fail,options){ 
    var defaults = { 
     foo: '', // these are options 
     bar: '', 
    }; 

    // this parses our "options" 
    for(var key in defaults) { 
     if(typeof options[key] !== "undefined") defaults[key] = options[key]; 
    } 

    return PhoneGap.exec(success,fail,"MyPlugin","myFunction",[defaults]); 
} 

,当我们调用此方法了JavaScript的 -

var foo = MyPlugin.myFunction(success,fail,{ 
foo:'hello', 
bar:'world' 
}); 

你会发现,大部分的PhoneGap API的使用这个语法,我发现奇怪的是,它们的文档并没有真正谈论如何去做这个。

我有一个关于我创建的插件的帖子,可以查看它以供参考。 博客 - http://www.drewdahlman.com/meusLabs/?p=138 的Git - https://github.com/DrewDahlman/ImageFilter

+0

确保你使用PhoneGap的构造 - 'PhoneGap.addConstructor(函数(){ 如果(window.plugins){ window.plugins = {};} ! window.plugins。MyPlugin = new MyPlugin(); });' – 2012-03-12 18:31:21

+0

是的它应该在你的插件js文件 - 看看这个Git项目 - https://github.com/DrewDahlman/ImageFilter/blob/master/plugin/ImageFilter.js – 2012-03-12 18:52:06

+0

是它给你任何错误?或者根本不工作? – 2012-03-12 20:25:34