Backbone three.js查看绑定

时间:2012-09-20 12:20:10

标签: binding view backbone.js three.js

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

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

我试图在视图中存储对渲染几何体的引用而不是模型,因为模型在多个浏览器(实际上是服务器)之间共享 - 使用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中存储对行(行)的引用 - 这在第一次渲染时(在初始化调用期间)是已知的,但此后不在(在渲染调用中) )。

如何处理此问题而不必依赖全局数组或在模型中存储信息的任何方向都将非常感谢......

谢谢!

3 个答案:

答案 0 :(得分:0)

我实际上并不知道Backbone是什么,但在主干中你必须使用_.bindAll(this,"render")绑定渲染函数,以使this.model.bind('update',this.render)工作。

答案 1 :(得分:0)

问题已修复,参考:

Private and public variables to a backbone view

非常感谢你的帮助!

答案 2 :(得分:0)

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

Private and public variables to a backbone view

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

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

而不是:

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

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