2014-11-02 66 views
1

尽管我已经设置了RESPAdapter来处理所有事情,但它没有伸手向我的服务器获取数据。我的代码是:Ember数据不会从API获取

var App = Ember.Application.create({ 
    LOG_TRANSITIONS: true 
}); 

App.ApplicationAdapter = DS.RESTAdapter.extend({ 
    host: '../api/' 
}); 

App.Me = DS.Model.extend({ 
    email: DS.attr('string'), 
    firstname: DS.attr('string'), 
    lastname: DS.attr('string') 
}); 

App.WelcomemessageController = Ember.Controller.extend({ 
    firstname:"I get rendered as i should", 
    model: function() { 
     return this.store.find('me'); 
    } 
}); 

是的,属性“firstname”得到渲染出来很好。在使用Chrome Devtools进行检查时,没有任何请求正在进行。

+0

您确定这是您的代码?这是在你的控制器无效的JavaScript。除此之外,模型钩子属于路线,而不是控制器。 – Kingpin2k 2014-11-02 18:47:40

+0

哦,对不起,是的,当然,应该有一个,名字后的财产,失去了。但是我不能在控制器上设置一个模型? Welcommessage-view会在出口外呈现,这意味着每条路线上都会显示Welcomemessage。那么我应该把它放在哪里呢? – 2014-11-02 18:52:10

+0

请检查[指南](http://emberjs.com/guides/routing/setting-up-a-controller/)。 'model:fn'属于路线。控制器确实有一个名为'model'的**属性**,但它应该是一个数据容器而不是一个抓取函数。该路由负责提取数据并使该数据可用于控制器。 – MilkyWayJoe 2014-11-02 19:07:21

回答

1

在你的情况下,你只是想使用一个计算属性,而不是模型函数。你可以称它为模型,但是它会有点混乱,因为通常一个控制器装饰一个模型,在这种情况下,它只是一个在控制器上称为模型的属性(为了装饰模型,控制器需要ObjectControllerArrayController

App.WelcomemessageController = Ember.Controller.extend({ 
    firstname:"I get rendered as i should", 
    user: function() { 
     return this.store.find('me'); 
    }.property() 
}); 
+0

它仍然不向服务器发出任何请求,并且Ember chrome插件中的模型仍为空。 – 2014-11-02 19:28:52

+1

计算出的属性被延迟计算。如果你不在你的模板中调用'user',Ember不会浪费时间来计算属性。 – Kingpin2k 2014-11-02 19:30:36

+0

谢谢,这是一个非常重要的事实! – 2014-11-02 19:32:36