2012-03-06 63 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