我开始明白科尔多瓦内部工作的方式越来越多;我继续努力的一件事是 JavaScript插件的格式. 我习惯于按如下方式编写JavaScript(据我所知,这是标准惯例): (function () { var version = "EXAMPLE", v
我习惯于按如下方式编写JavaScript(据我所知,这是标准惯例):
(function () { var version = "EXAMPLE", v1, v2, v3 res; function somePrivateFunction(successCallback, errorCallback) { someOtherPrivateFunction(sc, ec); } function someOtherPrivateFunction(successCallback, errorCallback) { cordova.exec(sc, ec, 'SomeService', 'SomeMethod', [args]); } res = { VERSION: version, doSomething: function (sc, ec) { somePrivateFunction(sc, ec); } } window.myPlugin = res; }());
但是,Cordova使用的格式我完全不熟悉.我认为(我在这里和那里只听说过这个术语)它使用了一个名为require的东西(通过大多数插件顶部的声明来判断).
我经常在官方Cordova插件中看到的格式如下:
var argscheck = require('cordova/argscheck'), utils = require('cordova/utils'), exec = require('cordova/exec'); var myPlugin = function () { } myPlugin.doSomething = function(successCallback, errorCallback) { exec(successCallback, errorCallback, 'SomeService', 'SomeMethod', [args]); } myPlugin.doSomethingElse = function(successCallback, errorCallback) { exec(successCallback, errorCallback, 'SomeService', 'SomeOtherMethod', [args]); } modules.export = myPlugin;
也许是因为我对这个需要的库没有任何了解 – 但是我没有得到它?就JavaScript而言,这对我来说似乎完全陌生.
什么是模块,什么是cordova / […]语法以及它表示什么.这些其他cordova模块在哪里定义(是正确的术语)以及模块从何而来?
最后,modules.export做了什么?我想了解< js-module> plugin.xml的标签和< clobbers>标签,但我认为这让我退缩.
我知道当Cordova构建项目时,它会在插件周围插入cordova.define.
也许至少有人可以澄清一下?谢谢!
require和exec函数是cordova对象的方法.当您安装插件时,它会被包含在函数中,以便访问cordova对象.那些电话实际上是cordova.require和cordova.exec以下是安装前后插件js文件的示例:
之前:
var exec = require("cordova/exec"); var VideoPlayer = { play: function(url) { exec(null, null, "VideoPlayer", "playVideo", [url]); } }; module.exports = VideoPlayer;
后:
cordova.define("com.dawsonloudon.videoplayer.VideoPlayer", function(require, exports, module) { var exec = require("cordova/exec"); var VideoPlayer = { play: function(url) { exec(null, null, "VideoPlayer", "playVideo", [url]); } }; module.exports = VideoPlayer; });
另外,要回答有关配置设置的问题,clobbers命令可以保护插件对象的名称空间.从我的插件:
<js-module src="www/VideoPlayer.js" name="VideoPlayer"> <clobbers target="VideoPlayer" /> </js-module>
这是说明我的JS文件的名称,以及用于在JS中调用我的插件的对象命名空间.