2013-07-08 11 views
7

Jak można wywołać pomocnika bloku kierownicy od innego pomocnika w ember.Wywołanie pomocnika bloku kierownicy innego pomocnika

Interesuje mnie konwersja następujących elementów w powiązanym pomocniku.

{{#each link in sideMenuLinks}} 
     <li class="navigation page"> 
      {{#linkTo ROUTE_VARIABLE link.linkToRouteContext}} 
       {{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a> 
      {{/linkTo}} 
     </li> 
    {{/each}} 

Zauważ, że będę musiał wezwać {{}} #linkTo blok wewnątrz pomocnika, a także zmienić ROUTE_VARIABLE o wartości od link.linkToRoute nieruchomości.

Odpowiedz

2

Pomocników kierownicy Ember są umieszczone na Ember.Handlebars.helpers. Możesz zadzwonić do nich pod numer Ember.Handlebars.helpers.{helperName}.call.

Jednak powyższe wygląda jak dynamiczny pomocnik częściowego/widoku stylu. Sugerowałbym stworzenie dla niego pomocnika Handlebars View. Składnia jest podobna, ale przekazujesz klasę widoku do helper.

Ember.Handlebars.helper('sideMenuLinks', App.SideMenuLinksView); 

Odpowiedni widok można użyć szablonu podobnego do Ciebie dając templateName

App.SideMenuLinksView = Ember.View.extend({ 
    templateName: 'sideMenuLinksTemplate' 
    }); 

You szablonu byłoby coś,

<script type='text/x-handlebars' data-template-name='sideMenuLinksTemplate'> 
    {{#each link in view.links}} 
     <li class="navigation page"> 
      {{#linkFor parentView.routeVariable link.linkToRouteContext}} 
       {{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a> 
      {{/linkFor}} 
     </li> 
    {{/each}}  
</script> 

Domyślna Ember linkTo jest statyczna, W że nie można przekazać nazwanej trasy ze zmiennej. Potrzebny będzie dynamiczny pomocnik linkTo, taki jak linkFor, który wyszukuje zmienną ścieżkę przed wewnętrznym zastosowaniem z zastosowaniem .

Ember.Handlebars.registerHelper('linkFor', function(path, params, options) { 
    var view = options.data.view; 
    var name = view.get(path); 
    var args = [name, params, options]; 

    return Ember.Handlebars.helpers.linkTo.apply(this, args); 
    }); 

Wreszcie możesz użyć tego pomocnika, jak poniżej. Właściwość links będzie związana z content kontrolera w tym przykładzie.

<script type='text/x-handlebars' data-template-name='application'> 
    {{sideMenuLinks links=content routeVariable='page'}} 
</script> 

Oto działa jsbin.

+1

Podobno to już nie działa, starając się to zrobić za pomocą ember-cli i bez powodzenia –

+0

Udało ci się? Wpadłem na ten sam problem. – julkiewicz

Powiązane problemy