这是一个非常基本的,但由于某种原因,我无法让它发挥作用。
我创建了公司资源:
App.Router.map(function() {
this.resource('companies');
});
并指定了一个模型
App.Company = DS.Model.extend({
name: DS.attr('string'),
});
App.CompaniesRoute = Ember.Route.extend({
model: function() {
return App.Company.find();
}
});
我有一些测试数据的灯具。
现在,我不应该从控制器访问我的companies
数据吗?喜欢这个
App.CompaniesController = Ember.ArrayController.extend({
length: function () {
return this.get('length');
}.property(),
});
我得到0,我在这个函数中尝试过的所有内容都让我想到控制器没有加载数据 - 即使我能够遍历模板中的模型,如下所示:
<script type="text/x-handlebars" data-template-name="companies">
<div class="row">
<div class="span12">
<h3>Companies</h3>
{{#each controller}}
<li>{{ name }}</li>
{{/each}}
</ul>
</div>
</div>
</script>
文档的某些部分显示setupController而不是model: function() {}
,但我不清楚这些差异。我试过两次都没有成功。
有什么想法吗?
答案 0 :(得分:3)
您应该声明属性(或属性)的路径,Computed Property取决于。在这种情况下,content.length
:
App.CompaniesController = Ember.ArrayController.extend({
length: function () {
return this.get('content.length');
}.property('content.length'),
});
或使用Binding:
App.CompaniesController = Ember.ArrayController.extend({
lengthBinding: 'content.length'
});
但是计算属性比绑定(内部)需要更少的工作,并且通常更快。
答案 1 :(得分:1)
你将'长度'声明为属性而不观察控制器内容的任何变化,因此,当创建控制器的实例时,它为0,这就是为什么它永远不会更新,你可以做Panagiotis说的话,或者你也可以观察内容的'@each'属性:
App.CompaniesController = Ember.ArrayController.extend({
length: function () {
return this.get('length');
}.property('@each')
});