[SalesForce] Client side logic that is executed when a user hovers over an Account in the list should be stored in which bundle member

While preparing myself to the Developer 1 certification I met the following question:

A developer created a lightning component named accountList.cmp that displays a list of Accounts. Client side logic that is executed when a user hovers over an Account in the list should be stored in which
bundle member?

A) accountList.renderer

B) accountListHelper.js

C) accountList.helper

D) accountListRenderer.js

I answered C), while the correct answer is D).

I am working with Lightning and I always delegate as much logic as I can from the controller to helper. And the button listeners which get executed are always in the controller, but since I do not see the controller option in the answers I stick to helper, which is C).

I consider the renderer to be something which is responsible for displaying components. So, if possible, could you please provide the resource to research the topic further and explain the answer to the question?

Best Answer

On top of my head, On Hover is similar to DOM manipulation. Due to lightning locker services if you do dom manipulation in helper which is called from controller you get exceptions as it is not allowed.

Dom manipulation is always allowed in after renderer, so accountListRenderer seems the best option.

https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/js_dom_modify_framework.htm

But But But.. if you see the method signature of afterRenderer

afterRender : function(component, helper) {
  this.superAfterRender();
   // Write your custom code here. 
   helper.bla(component);
}

you can call helper method from the renderer, so technically helper is the best place to write that code, and it should be called from renderer and not the controller.

Related Topic