【问题标题】:Backbone three.js view bindingBackbone three.js 视图绑定
【发布时间】:2012-09-20 12:20:09
【问题描述】:

很抱歉问了一个很简单的菜鸟问题。

我有一个视图,它在 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 中存储对行(行)的引用 - 这在第一次渲染时(在初始化调用期间)是已知的,但在此后(在渲染调用中) )。

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

谢谢!

【问题讨论】:

  • 这很奇怪。一旦在initialize() 中定义了this._hudline,它就应该是实例的一个属性,并且即使在第一次render() 调用之后,在该hudContact 对象的生命周期内仍然存在。是否有可能其他地方的其他代码正在篡改该数据并可能破坏它?
  • 嘿,谢谢你 - 它至少证实我一开始就在正确的树上吠叫!

标签: binding view backbone.js three.js


【解决方案1】:

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

【讨论】:

  • 嗨,谢谢你 - 它实际上调用渲染循环很好我认为:this.model.bind('update', this.render, this), 第二次出现 'this ' 减轻了 _.bindAll 的要求——但是,我已经尝试了这两种方法都无济于事。会继续玩。
【解决方案2】:

问题已通过参考解决:

Private and public variables to a backbone view

非常感谢您的帮助!

【讨论】:

  • 由于此链接包含在您的其他答案中,请通过删除此链接来帮助清理网站。
【解决方案3】:

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

Private and public variables to a backbone view

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

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

而不是:

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

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

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 2013-03-18
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多