tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Ligtning Component開発の命名に関する注意

Lightning Component開発でいろいろ試していた所、予期せぬエラーに遭遇しました。

f:id:tyoshikawa1106:20150925223431p:plain

Something has gone wrong. Assertion Failed!: run() cannot be called on a server action. Use $A.enqueueAction() instead. : false.
Please try again.


何かが間違っています。アサーションに失敗しました!...という感じのエラーメッセージです。


状況としてはLightning ComponentにApexクラスの宣言を追加した後、ボタンクリック時にJS処理を実行したタイミングでエラーがでるようになりました。
f:id:tyoshikawa1106:20150925223838p:plain


画面表示したタイミングではエラーにならない。JS処理の中身を空にした状態(Apexクラスの呼び出し処理は実行しない状態)でもエラーが発生する。...という不思議な状態です。


いろいろ試行錯誤してみた結果、原因はLightningのJS処理とApexクラス側のメソッド名の命名の仕方にありました。そのときの命名はこのようにしていました。

LightningのJS側 (controller.js)

f:id:tyoshikawa1106:20150925224351p:plain

Apexクラス側

f:id:tyoshikawa1106:20150925224441p:plain


このようにLightningのcontroller.jsとApexクラスのメソッドに同じ名称を指定することで上記エラーが発生するみたいです。確かにクリック時にcontroller.jsの処理を呼び出す場合、『"{!c.doSave}"』というように『c.』とつけることになり、controller.jsからApexクラスの処理を呼び出す時も『"c.doSave"』というようにcontroller.jsと同じように『c.』を宣言する必要があります。


このため、Lightningの方でどちらを呼んでいるか判断できなくなる..的な感じでエラーが発生したと思われます。Lightning Componentの開発を行う際には、controller.jsとApexクラスのメソッド名に同じ名前を付けないように注意した方がいいみたいです。