2016-08-18 2 views
-1

In meinem Ember Template/HBs, habe ich den folgenden Code;Ember Bind Controller-Attribut zu Hbs-Vorlage

{{#my-accordion accordionPanels=myPanels.accordionPanels as |accordion|}} 
{{/my-accordion}} 

Auch Controller js in meiner Unterstützung, nach einiger AJAX Verarbeitung, ich

self.set('myPanels', myPanels); 

nun aus irgendwelchen Gründen scheint es, dass der Controller Attribut, das I setze nicht auf die hbs gebunden zu werden Datei

das einzige, was ist das Attribut nicht sofort verfügbar ist, und ich habe einige AJAX-Verarbeitung zu tun, um die Daten & am Ende, dass zu setzen, ich bin die Einrichtung myPanels

Mache ich etwas falsch?

Antwort

0

vielleicht myPanels Unter der Annahme, ist mehr als ein Behälter für accordionPanels, dann könnten Sie eine berechnete Eigenschaft für accordionPanels erstellen:

accordionPanels: Ember.computed('myPanels', function() { 
    return this.get('myPanels.accordionPanels'); 
} 

Dann in der Vorlage:

{{#my-accordion accordionPanels=accordionPanels}} 
{{/my-accordion}} 
0

Sie tun genau richtig und es sollte funktionieren. Sie können Gegenprobe self bezieht richtigen Daten an die Steuerung und myPanels enthält console.log(self,myPanels)

Controller mit \ application.js

import Ember from 'ember'; 
import moment from 'moment'; 

export default Ember.Controller.extend({ 
    myPanels:{accordionPanels:[1,2]}, 

    init(){ 
     this._super(...arguments); 
     //For illustration purpose 
     Ember.run.later((() => { 
      console.log('init emer run callback ',this); 
      this.set('myPanels',{accordionPanels:[3,4,5]}); 
     }),5000); 
    },  
}); 

templates \

{{#my-accordion accordionPanels=myPanels.accordionPanels as |accordion|}} 
From Child :{{accordion}} <br/> 
From Parent: {{myPanels.accordionPanels}} 
{{/my-accordion}} 

{{outlet}} 

templates application.hbs \ Komponenten \ my-accordion.hbs

{{yield accordionPanels}}