- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们正在尝试将项目的打包方式从 dojo 切换到 google 闭包,但到目前为止我们还没有成功。这是一个简单的例子,说明了我们正在努力完成的事情:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="runtime/src/core/lib/goog-rev26/base.js"></script>
<script>
goog.require("foo.bar");
function main() {foo.bar.echo("hello world")}
</script>
</head>
<body onload="main()">
</body>
</html>
Then in /foo/bar.js
I have:
goog.provide("foo.bar");
foo.bar.echo = function(s) {console.debug(s);}
我在firebug中收到的错误如下:
goog.require could not find: foo.barfoo is not defined
当我查看“网络”选项卡时,没有发出提取文件的 http 请求 - 我期望闭包库生成一个脚本标记来提取 bar.js
。
救命啊! ;)
最佳答案
我想通了,这不是很难,但有一些陷阱。
基本上,您可以在以下几种模式之一中使用依赖项生成脚本 calcdeps.py ( you should read calcdeps.py docs ):
对于开发,您应该使用 (1),因为它允许您在编辑 JS 源代码后不运行 calcdeps.py,除非您更改依赖树。剩下的答案都是这样,我还没有试过另一种。
这是我为生成它所做的:
#!/bin/bash
cd closure-library/closure/goog
python ../bin/calcdeps.py -p ../../../js -o deps > ../../../my-deps.js
...假设目录结构如下:
project/
closure-library/ (as checked out from SVN)
js/ (my JS code)
app.html
(-p
参数遍历指定目录下的所有js文件,文档说如果需要可以指定多个目录进行搜索。)
上面的调用在主 app.html 旁边创建了一个 my-deps.js 文件,我用它来运行应用程序。创建的文件在 js/
中包含有关我的 JS 文件的信息,如下所示:
goog.addDependency('../../../js/controllers.js', ['proj.controllers'], []);
goog.addDependency('../../../js/ui.js', ['proj.ui'], ['proj.controllers']);
- 第一个字符串是我的 JS 文件的路径相对于 closure-library/closure/goog/base.js(这很重要!),第二个数组是 goog.provide
-d字符串,最后一个数组是goog.require
-d字符串列表。
现在在 app.html 中我有:
<script src="closure-library/closure/goog/base.js"></script>
<script src="my-deps.js"></script>
<script>
goog.require("proj.ui");
</script>
<script>
// here we can use the required objects
</script>
注意:
goog.require
call has to be in a separate script tag , 因为它附加了一个脚本标签来加载所需的脚本,并且在当前脚本标签完成处理后加载它们。陷阱:
goog.require
通过连接 base.js 基本 URL(即没有 base.js 叶名)和 deps.js 中 goog.addDependency 的第一个参数来创建要加载的脚本 URL。关于javascript - 如何使用 goog.provide 和 goog.require 加载我自己的 js 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1918996/
当我将 goog.require 放入 HTML 文件时.. base.js文件一定要写这样的script标签 然而,当我把一个由 depswriter.py 生成的依赖文件..它不会放置其他文件所
我正在学习 google 闭包,当我尝试使用 goog.ui 组件(其中的任何类)时,出现错误 goog.require 找不到:goog。用户界面。 我的代码是: goog.require('goo
在这段涉及构造函数的 Google Closure javascript 代码片段中,为什么 goog.base(this); 是必需的? Foo 不是已经通过 goog.inherits(foo,
谁能告诉我其中的区别。我刚刚开始关闭谷歌。 最佳答案 goog.provide 创建一个命名空间; goog.require 从给定 namespace “导入”代码,以便闭包编译器可以找到它。 通常
goog.structs 提供了什么而 goog.object 没有提供?我浏览了文档,但没有发现任何令人满意的东西,除了 goog.structs 的第一行说: Generics method fo
更新到 Google Closure Library 的修订版 2156 后,goog.require() 无法找到 goog.ui.AutoComplete。 svn update At revis
我有一个监听 DOM 元素上的事件的 View 类。它还会触发 Controller 监听的事件。 如何才能最好地与 Google Closure 的库配合使用? 这是我最好的镜头。 /** * @
我们正在尝试将项目的打包方式从 dojo 切换到 google 闭包,但到目前为止我们还没有成功。这是一个简单的例子,说明了我们正在努力完成的事情:
我对调用以下代码时发生的情况感到有点困惑: goog.net.XhrIo.send("/welcome", goog.bind(this.handleWelcome, this)); 我有一个带有这个
我正在尝试使用闭包编译器和闭包库。 当我使用该库时,一切正常,我在模拟中包含“base.js”,它适用于我的所有 javascript 文件。 当我“编译”我的应用程序时,问题就出现了:在输出文件中,
我想将 WebGL 与 Google Closure Compiler 结合使用(主要用于三维 View )。我查看了库源代码,但发现 goog.webgl 命名空间中当前只有一个文件,它只做常量值定
来自 Google 的 Closure 库: goog.inherits = function(childCtor, parentCtor) { /** @constructor */ fun
我到处搜索,似乎找不到这个问题的答案:Google 闭包编译器使用 goog.require 函数解析依赖项的顺序是什么。 示例: goog.require('work.Utils'); goog.r
当某些实验标志打开时,我将注入(inject)注册为: 'abcFactory': name.space.createSomeModel 并注入(inject)工厂如下: /** * @param
我正在尝试使用 Google 的 libphonenumber我项目中的库。我正在尝试使用 javascript 版本验证电话号码输入,但它给我一个“goog 未定义”错误。我是 javascript
我想用goog.addSingletonGetter() ( http://closure-library.googlecode.com/svn/!svn/bc/4/trunk/closure/goo
我做了一个 goog.Timer对象 ( http://closure-library.googlecode.com/svn/docs/class_goog_Timer.html ) 与 new go
我使用 Closure Compiler用于在高级模式下测试我的 js 代码的在线工具。 我的代码片段如下: // ==ClosureCompiler== // @compilation_level
我想用google闭包库的goog.module实现JS模块懒加载。 我已经能够通过键入 goog.require(module_name) 来使用这些模块。但是,脚本模块会在开始时以这种方式加载。所
我在我的项目中使用 Google 闭包库和编译器。 下一个字符串出现奇怪的错误: if (!properties.name) { throw {message: 'Widget name ex
我是一名优秀的程序员,十分优秀!