Uncaught TypeError: method.apply is not a function in Ember 1.13.7 and above


#1

I am running into an error after upgrading from Ember 1.13.6 and I am unsure of how to even debug this issue. I encountered this error with 1.13.7, 1.13.9, and 2.0.1. I tried turning on Ember.run.backburner.DEBUG = true; since the backburner is in the stack trace, but I didn’t notice a difference in the error output.

This is my console output: Attempting transition to loading Intermediate-transitioned into 'loading’ Uncaught TypeError: method.apply is not a function_emberRuntimeSystemObject.default.extend.trigger @ ember.debug.js:47356superWrapper @ ember.debug.js:22379Renderer.didRender @ ember.debug.js:12232Renderer_dispatchLifecycleHooks @ ember.debug.js:12149Renderer_renderTopLevelView @ ember.debug.js:12115Queue.invoke @ ember.debug.js:908Queue.flush @ ember.debug.js:974DeferredActionQueues.flush @ ember.debug.js:770Backburner.end @ ember.debug.js:160Backburner.run @ ember.debug.js:228Backburner.join @ ember.debug.js:263run.join @ ember.debug.js:20280run.bind @ ember.debug.js:20343jQuery.Callbacks.fire @ jquery.js:3099jQuery.Callbacks.self.fireWith @ jquery.js:3211jQuery.extend.ready @ jquery.js:3417completed @ jquery.js:3433


#2

What do typeof method and typeof method.apply yield? The error indicates that either method is not a function, or its apply method has been overriden by something other than a function.


#3
>typeof method
"string"
>typeof method.apply
"undefined"

It appears to be happening on childDidRender:

    /**
      Override the default event firing from `Ember.Evented` to
      also call methods with the given name.
       @method trigger
      @param name {String}
      @private
    */
    trigger: function () {
      this._super.apply(this, arguments); arguments = ["didRender"]
      var name = arguments[0]; name = "didRender"
      var method = this[name]; method = "childDidRender"
      if (method) {
        var length = arguments.length; length = 1, arguments = ["didRender"]
        var args = new Array(length - 1); args = []
        for (var i = 1; i < length; i++) { i = 1
          args[i - 1] = arguments[i]; args = [], arguments = ["didRender"]
        }
        return method.apply(this, args);
      }
    },

#4

Wow, just looking up that info put me on the right track! This was a bug in our liquid-fire version.


#5

What you did forget to mention is to install liquid-fire version 0.21.2 or greater. Did search a while to find out how to fix that problem. :smile: