我正在尝试自动化 JS 库中的特定模块,但陷入了我想要定义一组属性的点(假设一个对象作为类的构造参数)。
/**
* This function initiates world peace!
* @constructor
* @param {object} defaults - The options to initiate peace.
* @param {number} defaults.issues - The number of issues being taken up.
* @param {string} defaults.source - The name of the location where process starts.
*/
var WorldPeace = function (defaults) {
// code here
};
Run Code Online (Sandbox Code Playgroud)
如果构造的所有属性都在一个位置定义,那就太好了。不幸的是,我的代码有许多模块有助于构建属性。可以说,在代码的其他部分(在后面的文件中)会导致具有更多属性
* @param {Date} defaults.start - The date when the process started.
* @param {Date} defaults.stop - The date when the process …Run Code Online (Sandbox Code Playgroud) javascript code-documentation google-closure google-closure-compiler jsdoc
我不知道这有多少(如果有的话)与 Google Closure 相关,或者它是否都是干净的 jsdoc,但我尝试使用 @typedef 来定义这样的特定类型的函数;
/**
* @typedef {function(paramType0, paramType1):returnType} name.space.and.TypeName
*/
Run Code Online (Sandbox Code Playgroud)
也试过
/**
* @typedef {function(paramType0, paramType1):returnType}
*/
name.space.and.TypeName;
Run Code Online (Sandbox Code Playgroud)
其中 param 和 return 类型是我要定义此函数规范的原因。我的问题是这样的;
为什么验证告诉我“方法不是函数类型”。我知道可以选择使用“函数”类型,但据我所知,这不允许我定义参数和返回类型?我也错了吗?
无论如何,我将不胜感激。谢谢。
下面是一个完整的HTML源代码,用于构建一个带谷歌闭包的简单工具栏.
在Chrome中提供错误消息:Uncaught TypeError: Cannot call method 'addChild' of undefined在标有// ERROR评论的位置.
任何人都可以提出修改此提示吗?谢谢!!!
编辑:这是正确的,错过了新的,但另一个错误是我应该使用render()而不是decorate(),因为decorate()需要所有dom元素(我没有定义按钮的占位符),同时render()创建新的.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="/m/google-closure/closure/goog/base.js"></script>
<script type="text/javascript">
goog.require('goog.dom');
goog.require('goog.ui.Toolbar');
goog.require('goog.ui.ToolbarButton');
</script>
<script type="text/javascript">
var load_sketcher = function(){
var tb = goog.ui.Toolbar();
tb.addChild(new goog.ui.ToolbarButton('A'), true);// ERROR!!!
tb.addChild(new goog.ui.ToolbarButton('B'), true);
tb.decorate(goog.dom.getElement('sk_toolbar'));// should have used render() here
};
</script>
</head>
<body onload='load_sketcher();'>
<div id="sketcher">
<div …Run Code Online (Sandbox Code Playgroud) 我不断收到给定对象不存在函数(重命名)的错误.是否有发布或设置或其他东西使它工作?
javascript compiler-construction jquery google-closure google-closure-compiler
我正在写一个基于[ libphonenumber ] 的简单电话号码解析器.不幸的是,"http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"需要永远加载,当我忘记文件并将其包含为src ="base.js"时,弹出一堆错误.
我的猜测是因为库尚未加载,所以goog.require()语句失败了.
我能做什么?
<!DOCTYPE html>
<html>
<head>
<title>Phone Number Parser</title>
<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script>
goog.require('goog.dom');
goog.require('goog.json');
goog.require('goog.proto2.ObjectSerializer');
goog.require('goog.string.StringBuffer');
</script>
<script src="phonemetadata.pb.js"></script>
<script src="phonenumber.pb.js"></script>
<script src="metadata.js"></script>
<script src="phonenumberutil.js"></script>
</head>
<body>
<script>
numbers = ['6509066389', '+40723875777', '720-935-6433', '914-262-7178', '7123040634'];
for (i in numbers) {
console.log(format_for_five9(numbers[i]));
}
function format_for_five9(phoneNumber) {
var $ = goog.dom.getElement;
var regionCode = 'US';
var output = new goog.string.StringBuffer();
try {
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);
number_json_serial = goog.json.serialize(new goog.proto2.ObjectSerializer(goog.proto2.ObjectSerializer.KeyOption.NAME).serialize(number));
number_json = …Run Code Online (Sandbox Code Playgroud) 是否可以从表单数据中获取JSON?我只能获得数据映射或字符串表示.
var form = goog.dom.getElement('myform');
console.log(goog.dom.forms.getFormDataString(form));
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Google Closure Compiler根据将要运行的位置(在服务器上与客户端)通过单个变量来分割我的应用程序代码.在这个例子中,将要在服务器上调用的所有内容都在isServerSidevar之后,但是,正在为客户端编译代码.所以我将设置isServerSide为false并让编译器删除客户端不会运行的所有内容...
里面app.js:
goog.provide('my.app');
my.app.log = function(message) {
document.write(message);
}
my.app.initClientSide = function() {
my.app.log('hello client');
}
my.app.initServerSide = function() {
my.app.log('hello server');
}
if (isServerSide) {
my.app.log('initing server');
my.app.initServerSide()
}else my.app.initClientSide();
Run Code Online (Sandbox Code Playgroud)
里面externs.js:
/**
* @define {boolean} is server side?
*/
var isServerSide=false;
Run Code Online (Sandbox Code Playgroud)
命令:
java -jar bin/compiler.jar --js closure-library/closure/goog/base.js --js app.js --externs externs.js --manage_closure_dependencies true --process_closure_primitives true --summary_detail_level 3 --warning_level VERBOSE --compilation_level=ADVANCED_OPTIMIZATIONS --closure_entry_point my.app
Run Code Online (Sandbox Code Playgroud)
预期产量:
document.write("hello client");
Run Code Online (Sandbox Code Playgroud)
实际产量:
isServerSide?(document.write("initing server"),document.write("hello server")):document.write("hello …Run Code Online (Sandbox Code Playgroud) javascript google-closure google-closure-library google-closure-compiler
我正在尝试使用Google Closure编译我的一个HTML5项目.我收到了几个我不知道如何解决的错误.事实上,它是相同的错误,但对于不同的变量.
这里有错误消息:
变量窗口是未声明的变量事件是未声明的变量控制台是未声明的变量音频是未声明的
这些变量是Javascript内置变量.如果我直接在命令行中编译同一个项目,它就可以工作.但是,就我而言,我需要使用ant文件(构建过程)来编译这个项目.我的ant构建脚本使用的是我在命令行中使用的相同jar文件.使用选项warnings ="verbose",它不起作用.如果我删除它,它的工作原理.如果我想使用选项警告 - "详细",我该怎么办?请解释我的区别.
有人可以帮帮我吗?谢谢!
google-closure google-closure-library google-closure-compiler
我使用require.js进行依赖关系管理和Google Closure注释,使我能够自动完成(在WebStorm/IDEA中).我们非常依赖Backbone并以类似Java的方式开发我们的Javascript代码 - 即使用静态和实例方法.
遗憾的是如何正确地为函数参数编写注释,这些函数参数实际上是类 - 与new关键字一起使用的参数.
require(['foo'], function(Foo) {
var bar = new Foo();
});
Run Code Online (Sandbox Code Playgroud)
WebStorm和/或Google Closure正确地假设它是Foo的一个实例,如果我按如下方式注释参数:
require(['foo'],
/** @param {Foo} Foo */
function(Foo) {
Foo.<cursor> <-- gives me an autocompletion for an instance of Foo
});
Run Code Online (Sandbox Code Playgroud)
一个快速谷歌搜索建议使用功能(新:富)作为参数的描述.但是,这种方法会丢失构造函数参数和/或类所具有的静态方法的自动完成.
我希望的构造应该类似于这个:
require(['foo'],
/** @param {Type<Foo>} Foo */
function(Foo) {
Foo.<cursor> <-- gives me an autocompletion for statics of Foo
});
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
我有一个很长的脚本很好地包装成一个,(function() {/.../})()以避免所有类型的名称污染.它是100%打字,零警告.
我发现Google Closure编译器从重新定义开始,i并且j在全局命名空间中感觉既不必要又危险,特别是因为我正在编译一个对命名空间没有干扰的脚本.(编译后的脚本以var i=null,j=!1;我认为的紧凑性原因开头).
我可以想到一个工作就是用它来包装它,--output_wrapper但我想不出谷歌会像这样污染命名空间的原因.
有没有?
google-closure ×10
javascript ×8
jsdoc ×2
forms ×1
function ×1
jquery ×1
json ×1
typedef ×1
webstorm ×1