2012-09-20 183 views
0

对不起,问什么可能是一个非常简单的noob问题。骨干three.js视图绑定

我有一个视图,它在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行(线)的参考 - 这是第一个已知的渲染(初始化通话过程中),但此后不(在渲染调用中)。

如何处理这个,而不必依赖全球阵列上或在模型中存储信息的任何方向将不胜感激......

谢谢!

+0

这很奇怪。一旦在'initialize()'中定义了'this._hudline',它应该是实例的一个属性,并且在该'hudContact'对象的生命周期中,即使在第一次调用render()后也会继续存在。其他地方的其他代码是否有可能篡改这些数据并破坏它? – jmk2142

+0

嘿,谢谢你 - 至少证实我正在吠叫正确的树开始! –

回答

0

这是参照解决以下文章:

Private and public variables to a backbone view

不过,我认为根本问题是与包装在一个自执行功能视图中的原始模板:

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

而不是:

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

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

0

我实际上并不知道BackboneIO是什么,但是在主干中,您必须将渲染功能与_.bindAll(this,"render")绑定,才能使this.model.bind('update',this.render)等工作正常。

+0

嗨,谢谢你 - 这实际上是在调用渲染循环,我认为它在:this.model.bind('update',this.render,this),'this'的第二次出现缓解了_.bindAll需求但是,我已经尝试过两种方法,目前还没有成功。将继续玩。 –