2015-09-24 11 views
7

Se voglio creare un modulo con le funzioni cui è possibile accedere in ogni modello e in cui posso utilizzare tutte le funzioni della vista (creazione di tag, utilizzando percorsi router ed ecc), qual è il modo migliore per raggiungere questo obiettivo?Come creare una vista globale in Phoenix Framework?

In poche parole, come faccio a creare una visione globale?

risposta

15

È possibile definire un modulo (che avevo messo nella directory aiutanti) che ha le funzioni in esso:

defmodule MyApp.SomeHelper do 

    def some_function do 
    #... 
    end 

end 

È quindi possibile includerlo nel MyApp.Web sotto la funzione view:

def view do 
    quote do 
     use Phoenix.View, root: "web/templates" 

     # Import convenience functions from controllers 
     import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1] 

     # Import URL helpers from the router 
     import MyApp.Router.Helpers 

     # Use all HTML functionality (forms, tags, etc) 
     use Phoenix.HTML 

     # Import custom helpers 
     import MyApp.SomeHelper 
    end 
    end 

La funzione some_function sarà ora disponibile in tutti i modelli.

+0

avrei dovuto importare anche 'MyApp.Router.Helpers' e utilizzare' Phoenix.HTML' in questo 'MyApp.SomeHelper' essere in grado di utilizzare tutte le funzioni di visualizzazione, non dovrei? – JustMichael

+0

Dipende veramente da come sono le tue funzioni. Se usano le funzioni da 'MyApp.Router.Helpers' e' Phoenix.HTML', allora lo farai. Oppure puoi usare il nome lungo. Per esempio. 'MyApp.Router.Helpers.user_path (conn,: index)' – Gazler

+0

Vedo, grazie mille – JustMichael

Problemi correlati