0

很抱歉问什么可能是一个非常简单的菜鸟问题。

我有一个视图,它在 Three.js 渲染器中创建几何图形 - 该视图第一次成功渲染。但是,对渲染函数的后续调用会失败,并出现未知的引用错误。

我试图在视图而不是模型中存储对渲染几何的引用,因为模型在多个浏览器(实际上是服务器)之间共享 - 使用 Backboneio.js

视图如下所示:

StarSystem.hudContact = BackboneIO.View.extend({
  el: '',
  model: '',
  initialize: function(options) {
    var material = new THREE.LineBasicMaterial({
      color: 0xFFFFFF,
    });

    var geometry = new THREE.Geometry();
    geometry.vertices.push(new THREE.Vector3(0, 0, 0));
    geometry.vertices.push(new THREE.Vector3(0, 0, ((camera[0].position.z - this.model.get('zPos')) / 10000)));

    var line = new THREE.Line(geometry, material);
    line.position.x = ((camera[0].position.x - this.model.get('xPos')) / 10000);
    line.position.y = ((camera[0].position.y - this.model.get('yPos')) / 10000);
    line.position.z = 0;
    line.Name = this.model.get('Name');

    this._hudLine = hudScene.add(line);
    this.model.bind('update', this.render, this);
  },
  render: function(){
  console.log(this._sceneLine.position.x);
    this._hudLine.position.x = ((camera[0].position.x - this.model.get('xPos')) / 10000);
    this._hudLine.position.y = ((camera[0].position.y - this.model.get('yPos')) / 10000);
    this._hudLine.position.z = 0;

  }
});

因此,可以看出,我试图在 this._hudLine 中存储对行(行)的引用 - 这在第一次渲染时(在初始化调用期间)是已知的,但在此后(在渲染调用中)不知道。

任何关于如何处理这个问题而不必依赖全局数组或在模型中存储信息的方向将不胜感激......

谢谢!

4

3 回答 3

0

我实际上不知道 BackboneIO 是什么,但是在骨干网中,您必须将渲染函数绑定_.bindAll(this,"render")到类似的this.model.bind('update',this.render)工作。

于 2012-09-20T22:11:50.443 回答
0

参考以下内容解决了该问题:

主干视图的私有和公共变量

非常感谢您的帮助!

于 2012-09-21T19:05:32.793 回答
0

参考以下文章解决了这个问题:

主干视图的私有和公共变量

但是,我认为根本问题在于将视图包装在自执行函数中的原始模板:

(function () {
  //view stuff
}).call(this);

而不是:

(function () {
  //view stuff
})();

一个菜鸟问题 - 非常感谢您的帮助!

于 2012-09-22T11:38:20.043 回答