Ember将控制器属性绑定到hbs模板

时间:2016-08-18 12:44:19

标签: javascript jquery ember.js

在我的Ember模板/ hbs中,我有以下代码;

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

同样在我的后备控制器js中,经过一些AJAX处理后,我做了

self.set('myPanels', myPanels);

现在由于某些原因,似乎我设置的控制器属性没有绑定到hbs文件

唯一的事情是该属性不能立即使用,我必须做一些AJAX处理来设置数据&最后,我正在设置myPanels

我做错了吗?

2 个答案:

答案 0 :(得分:0)

假设myPanels可能不仅仅是accordionPanels的容器,那么您可以为accordionPanels创建一个计算属性:

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

然后,在您的模板中:

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

答案 1 :(得分:0)

你做的完全正确,它应该工作。您可以使用self进行交叉检查myPanels引用控制器,console.log(self,myPanels)包含正确的数据

<强>控制器\的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);
    },    
});

<强>模板\ application.hbs

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

{{outlet}}

<强>模板\组件\ MY-accordion.hbs

{{yield accordionPanels}}