【问题标题】:Router instance differing in BackboneJS路由器实例在 BackboneJS 中不同
【发布时间】:2014-07-01 03:59:34
【问题描述】:

在 BackboneJS 的 router.js 中使用 this.initialize();

有什么区别
require(['router'],function(Router) {
    router      = Router;
    router.intialize();                         
});

如何获取相同的实例?

谁能帮帮我,在此先感谢

编辑:

我想实现代码覆盖率单元测试 (Jasmine.js 1.3.1)。

为此,我需要将路由器(与在没有代码覆盖工具的情况下运行应用程序时完全相同的实例)实例传递给我的 Jasmine 规范的 .js 文件。

如果不可能,在规范执行期间获取相同的实例,请告诉我如何使用不同的方法获取实例。

如果您在此过渡过程中需要任何说明,请告诉我。

提前致谢。

【问题讨论】:

  • 我不明白这个问题。您可以通过 someobj instanceof Backbone.Router 检查路由器对象的实例 - 我怀疑您在此处传递给当前模块的内容是主干路由器的实例。但我不明白为什么你在路由器实例上显式调用初始化方法,因为这个构造函数在实例化时被隐式调用。
  • 我需要在 Jasmine 中编写测试用例,因为我必须明确调用 router.initialize();

标签: jquery unit-testing backbone.js jasmine backbone-routing


【解决方案1】:

区别在于constructor。骨干类都有一个在实例化类时运行的方法。 constructor 方法是在您执行 new Backbone.Router() 时调用 initialize 方法的方式。

如您所见,constructor 对应于 Router

var Router = Backbone.Router = function(options) {
    options || (options = {});
    if (options.routes) this.routes = options.routes;
    this._bindRoutes();
    this.initialize.apply(this, arguments);
};

调用initialize 和实例化路由器的主要区别在于,当你实例化它时,路由是绑定的。

嗯,这就是 Backbone 的主要区别。调用 new A.B()A.B() 之间还有 Javascript 的区别,即 new 关键字创建一个新对象并将其设置为 this 在您的 constructor/initialize 函数中,而直接调用它你正在做的方式将this 设置为Router 类本身。

因为您几乎肯定不想在测试方法时将Router 类用作this,所以您可能想要做的只是在您的设置代码中正确地实例化Rotuer

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多