【问题标题】:Custom PhoneGap Plugin (iOS) Function Issue自定义 PhoneGap 插件 (iOS) 功能问题
【发布时间】:2012-03-06 19:17:10
【问题描述】:

我正在使用本教程创建自定义 PhoneGap 插件: http://wiki.phonegap.com/w/page/36753496/How%20to%20Create%20a%20PhoneGap%20Plugin%20for%20iOS

我已经成功地使用了作者的示例,但是我有几个问题我无法找到答案。

创建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);      
      }
  );  

(这是测试插件的测试代码)也可以用更标准化的方式编写吗?即,只是调用没有 nativeFunction 部分的 Javascript 函数?

非常感谢您的任何意见,谢谢!

【问题讨论】:

    标签: iphone ios xcode plugins cordova


    【解决方案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

    【讨论】:

    • 确保您使用的是 phonegap 构造函数 - PhoneGap.addConstructor(function () { if(!window.plugins) { window.plugins = {}; } window.plugins. MyPlugin = new MyPlugin(); });
    • 是的,它应该放在你的插件 js 文件中 - 看看这个 git 项目 - github.com/DrewDahlman/ImageFilter/blob/master/plugin/…
    • 最后一件事 - 尝试像这样定义函数var MyPlugin = function(){};
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多