2012-09-20 297 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需求但是,我已經嘗試過兩種方法,目前還沒有成功。將繼續玩。 –