如何在其coffeescript子类中覆盖Backbone.Router.execute函数?

时间:2019-05-31 06:10:46

标签: backbone.js coffeescript

我有一个使用coffeescript中的extends关键字扩展Backbone.Router的类。如何在我的课程中覆盖Backbone.Router.execute方法?

我尝试在子类中添加具有相同方法签名的execute,但是它仍在调用父类方法而不是自定义方法。

jQuery ->
  class MyRouter extends Backbone.Router

    routes:
      "path/:id"          : "myFunction"

    execute: (callback, args, name) ->
      console.log('hello')
      console.log(args)
      # do stuff

      args.push(parseQueryString(args.pop()));
      if callback
         callback.apply(@, args);

   myFunction: (id) ->
     # do stuff

我想在调用myFunction之前对args进行一些检查,但是以某种方式无法覆盖execute方法。我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

您似乎根本无法混合骨干对象和ES6类。

这里是post which explains it in great detail

  

事实证明,ES6类不支持将属性直接添加到类实例中,而仅支持函数/方法。当您了解实际情况时,这才有意义。通过JavaScript继承,属性通常是在创建实例时在实例上设置的,而方法则在原型对象上设置并在每个实例之间共享。如果将属性直接添加到原型中,它们还将在每个实例之间共享,如果属性是具有可变状态(如数组)的对象,则会造成问题


您将必须坚持使用Object.extends()的骨干方式。这是您在coffeescript中的代码的示例:

MyRouter = Backbone.Router.extend        
    routes:
      "path/:id"          : "myFunction"

    execute: (callback, args, name) ->
      console.log('hello')
      console.log(args)
      # do stuff

      args.push(parseQueryString(args.pop()));
      if callback
         callback.apply(@, args);

   myFunction: (id) ->
     # do stuff