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

yquaqz18  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个类,它使用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方法。我在这里做错了什么?

mrwjdhj3

mrwjdhj31#

看起来你不能简单地混合 Backbone.js 的对象和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

相关问题