2017-01-17 7 views
0

У меня есть служба под названием DashboardLayoutStyleCalculatorService следующими способами. Другие методы удалены, потому что они на самом деле не связаны с вопросом:Ошибка при вызове метода внутри службы из директивы в Coffeescript

styleFns = 
    table: @computeStyleForTable 
    single_value: @computeStyleForSingleValue 

    @computeStyleFor = (type, height = null) -> 
    return styleFns[type](height) 

Эта услуга вызывается с помощью двух различных директив:

Directive 1:

scope.computeStyle = (component) -> 
    if component?.height? 
    height = component.height * 50 
    return DashboardLayoutStyleCalculator.computeStyleFor(component.element.type, height) 

Директива 2:

scope.computeStyle = (element, rowComponent) -> 
    return DashboardLayoutStyleCalculator.computeStyleFor(element.type, rowComponent?.height?) 

Что мой код делает в оболочке ореха, так это то, что в зависимости от типа ввода wi тонкий computeStyleFor, он вызывает два разных метода для таблицы или визуализации одного значения. Существует также некоторый динамический расчет высоты, основанный на определенных параметрах, которые не являются полностью необходимыми для этого вопроса.

Когда я запускаю этот код в браузере, я получаю следующее сообщение об ошибке:

main.webpack-a9f3967e.js:27 TypeError: e[t] is not a function 
    at Object.computeStyleFor (https://localhost:54321/webpack/main.webpack-a9f3967e.js:10:17938) 
    at e.t.computeStyle (https://localhost:54321/webpack/main.webpack-a9f3967e.js:10:16879) 
    at fn (eval at compile (https://localhost:54321/webpack/vendor.webpack-6f544239.js:49:29700), <anonymous>:4:627) 
    at d.$digest (https://localhost:54321/webpack/vendor.webpack-6f544239.js:48:11027) 
    at d.$apply (https://localhost:54321/webpack/vendor.webpack-6f544239.js:48:12692) 
    at https://localhost:54321/webpack/vendor.webpack-6f544239.js:47:23881 undefined 

Вероятно, есть проблема или с computeStyleFor или styleFns.

ответ

0

Из того, что я вижу, я предположил бы, что ваш вызов component.element.type дает unexpeted ключ

scope.computeStyle = (component) -> 
    if component?.height? 
     height = component.height * 50 
    return DashboardLayoutStyleCalculator.computeStyleFor(component.element.type, height) 
                  ^^^^^^^^^^^^^^^^^^^^^^ 
                   | 
                   ---- Not what you expect 

Поэтому ваш позже вызов

@computeStyleFor = (type, height = null) -> 
    return styleFns[type](height) 
        ^^^^^^ 
         | 
         --- fails as styleFns[type] yields undefined which is not a function 

добавить некоторый вывод, чтобы увидеть, что эти выражения type и styleFns[type] выход