【发布时间】:2014-02-04 17:18:52
【问题描述】:
我开始越来越了解 Cordova 内部的工作方式;然而,我一直在努力解决的一件事是 JavaScript 插件的格式。
我习惯于如下编写我的 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;
也许是因为我对这个 require 库一无所知 - 但我不明白?就 JavaScript 而言,这对我来说似乎完全陌生。
什么是模块,cordova/[...] 语法是什么,它表示什么。这些其他cordova模块在哪里定义(这是正确的术语)以及modules来自哪里?
最后,modules.export 做了什么?我试图理解plugin.xml 的<js-module> 标记和<clobbers> 标记,但我认为这阻碍了我。
我了解 Cordova 在构建项目时会在插件周围插入cordova.define。
也许至少有人可以澄清一下?谢谢!
【问题讨论】:
-
require 和 exec 函数是 cordova 对象的方法。当您安装插件时,它会被包装在可以访问cordova对象的函数中。这些调用实际上是 cordova.require 和 cordova.exec
-
Louis,根据我的解释,这与 RequireJS 无关。我已删除标签
-
有了插件框架,除非你有特殊需要,只需要关心
exec命令,它是js和native代码之间的桥梁功能。 -
@keldar,没有人回答这个问题中关于
modules.export的部分,你有想过吗?
标签: javascript plugins cordova cordova-3