Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 如何在coffeescript子类中重写Backbone.Router.execute函数?_Backbone.js_Coffeescript - Fatal编程技术网

Backbone.js 如何在coffeescript子类中重写Backbone.Router.execute函数?

Backbone.js 如何在coffeescript子类中重写Backbone.Router.execute函数?,backbone.js,coffeescript,Backbone.js,Coffeescript,我有一个类,它使用coffeescript中的extends关键字扩展主干路由器。如何重写类中的Backbone.Router.execute方法 我尝试在我的子类中添加一个具有相同方法签名的execute,但它仍然调用父类方法,而不是我的自定义方法 jQuery -> class MyRouter extends Backbone.Router routes: "path/:id" : "myFunction" execute: (c

我有一个类,它使用coffeescript中的
extends
关键字扩展主干路由器。如何重写类中的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方法。我做错了什么?

看起来您根本无法混合主干对象和ES6类

这是一本书

事实证明,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

您能否演示如何实例化
MyRouter
并调用
execute
方法?@caffeinated.tech正常实例化
customRouter=new MyRouter
。我们不需要调用execute方法,因为主干网正在处理这个问题。