2012-10-01 60 views
1

工作,我尝试ember.js,我与渲染项目的数组到模板挣扎:emberjs ArrayController不模板

的index.html

<script type="text/x-handlebars"> 
    {{App.test}} 
    </script> 

    <script type="text/x-handlebars"> 
    {{#each App.eventsController}} 
     <p>{{title}}</p> 
    {{/each}} 
    </script> 

    <!-- le javascript --> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
    <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.2.min.js"><\/script>')</script> 
    <script src="js/libs/handlebars-1.0.0.beta.6.js"></script> 
    <script src="js/libs/ember-1.0.pre.min.js"></script> 
    <script src="js/app.js"></script> 
</body> 

app.js

var App = Em.Application.create({ 
    test : 'does it work?...' 
}); 

App.Event = Ember.Object.extend({ 
    title: '', 
    body: '' 
}); 

App.eventsController = Ember.ArrayController.create({ 

    events: [], 

    init: function() { 

     self = this; 
     self.pushObject(App.Event.create({ 
      title: "Event 1", 
      body: "Content" 
     })); 
    } 
}); 

第一结合( App.test)确实工作正常。只有我的第二个调用什么都不做,只是把一个空的handlebar-script-tag放到我的DOM中。

那么我在这里错过了什么?

回答

0

你会希望把“内容”属性里你eventsController的数据:

App.eventsController = Ember.ArrayController.create({ 
    content: [], 

    init: function() { 
     this.get('content').pushObject(App.Event.create({ 
      title: "Event 1", 
      body: "Content" 
     })); 
    } 
}); 

你的模板{{#each App.eventsController}}应该自动拾取的变化,并显示您的标题。

+0

我的铬控制台说:“遗漏的类型错误:无法调用‘oushObject’空的”。我觉得我正在做一些非常基本的错误...: -/ – Sven

+0

可能是一个愚蠢的问题,但是你是否在应用程序的顶部有一个声明:var App = Ember.Application.create({}) ;和一个App.initialize();在app.js的结尾? –

+0

我确实创建了应用程序。我不初始化它!我试过了,没有什么区别。但据我所知,我不需要初始化它?! – Sven

2

如果您覆盖init您需要确保呼叫this._super,以便控制器可以完成其设置过程。一旦你这样做你的代码应该按预期工作。

init: function() { 
    this._super(); 
    this.get('content').pushObject(App.Event.create({ 
     title: "Event 1", 
     body: "Content" 
    })); 
} 

我已经创建了一个的jsfiddle给你,让你可以看到它的工作:http://jsfiddle.net/qKXJt/188/

+0

你的代码也没有超级电话的工作...我会稍后在我的环境中尝试。谢谢 – Sven