0

我开始使用 Google 的 Closure 库(以及 Lime.js),我正在尝试创建一个非常基本的场景,其中包含 Lime.js 的 Lime.Layer 类的自定义子类的一些实例。

据我了解(正如我在各种示例和 Google 自己的文档中阅读的那样),您的子类中需要 7 个项目才能正确继承其预期的超类,并可供其他类使用:

  • goog.provide("name.of.subclass")
  • goog.require("name.of.superclass")
  • 在构造函数@constructor上方的注释中
  • 在构造函数@extends name.of.superclass 上方的注释中
  • 在构造函数内部,调用 name.of.superclass.call(this)
  • 在构造函数之后, goog.inherits(name.of.subclass, name.of.superclass)
  • 最后,使用 goog.exportSymbol('name.of.subclass', name.of.subclass) 导出构造函数

我的项目结构很简单。“index.html”位于主级别,旁边是一个名为“js”的文件夹,其中包含我所有的自定义 JavaScript 文件。我已经运行了其他更简单的测试来确认 Closure 和 Lime 都正确加载和初始化。我只是想进一步进入一些更多 OO 风格的模式。我的代码和我遇到的错误如下。


索引.html

<!DOCTYPE html>
<html>
    <head>
        <title>LimeTest</title>
        <script type="text/javascript" src="../closure/closure/goog/base.js"></script>
        <script type="text/javascript" src="js/limetest.js"></script>
    </head?
    <body onload="limetest.start()"></body>
</html>

js/limetest.js

// Expose class
goog.provide('limetest');

// Import dependencies
goog.require('lime.Director');
goog.require('lime.Scene');
goog.require('lime.Layer');

// Import custom subclass of lime.Layer
goog.require('stupid.thing');

// Main Start function
limetest.start = function ()
{
    // setup Lime.js scene
    var director = new lime.Director(document.body, 1024, 768);
    var scene = new lime.Scene();
    var mainLayer = new lime.Layer().setPosition(512, 384);

    // instantiate subclass
    var something = new stupid.thing();

    // assemble scene
    scene.appendChild(mainLayer);
    mainLayer.appendChild(something);
    director.makeMobileWebAppCapable();
    director.replaceScene(scene);
}

// Export start method
goog.exportSymbol('limetest.start', limetest.start);

js/东西.js

goog.provide('stupid.thing');

goog.require('lime');
goog.require('lime.Layer');

/*
*   @constructor
*   @extends lime.Layer
 */
stupid.thing = function ()
{
    lime.Layer.call(this);
};
goog.inherits(stupid.thing, lime.Layer);

goog.export('stupid.thing', stupid.thing);

我在 Chrome 中遇到的错误是:

base.js:     634   goog.require could not find: stupid.thing
base.js:     634   goog.logToConsole_
base.js:     675   goog.require
limetest.js: 10    (anonymous function)

base.js:     677   Uncaught Error: goog.require could not find: stupid.thing
base.js:     677   goog.require
limetest.js: 10    (anonymous function)

我在这里想念什么?

4

1 回答 1

0

基本上,您有两种选择来解决依赖项:1)手动加载依赖脚本 2)加载 deps.js 文件,该文件提供依赖项的路径

通常,会生成“deps.js”(lime 是否会为您执行此操作,我不熟悉)?

作为旁注,您可能想尝试 goog.defineClass 从类定义中删除一些样板(隐含@constructor、@extends 和 goog.inherits)。

于 2015-01-22T03:16:16.580 回答