1

我正在尝试从后端加载一些 JSON 并启动一个模型。到目前为止,我想我得到了模型,但没有设置它的属性:(

这是我的测试代码:

window.App = Ember.Application.create();

App.Router.map(function() {
   this.resource('person', { path: '/people/:person_id' });
});

App.Adapter = DS.RESTAdapter.extend({
   namespace: '~user1/embertest'
});

App.Store = DS.Store.extend({
   revision: 11,
   adapter: App.Adapter,
});

var attr = DS.attr;
App.Person = DS.Model.extend({
   firstName: attr('string'),
   lastName: attr('string')
});

App.PersonRoute = Ember.Route.extend({
   model: function(params) {
      return App.Person.find(params) ;
   }
});

App.PersonController = Ember.Controller.extend({
   contentDidChange: function() {
      debugger ;
      console.info(this.get('content'));
   }.observes('content.isLoaded')
}) ;

并且数据是从一个仅包含以下内容的 json 文件加载的:

{"persons": {"firstName": "Jeff","lastName": "Atwood"}}

现在,使用 url localhost/~user/embertest.html#people/10 我看到数据被加载并且控制器方法contentDidChange被调用。但是当我这样做时

this.content.get("firstName") ; // or this.get("content").get("firstName")

它返回“未定义”。这里出了什么问题?

最后,这是我的模板,它们位于:

<script type="text/x-handlebars" data-template-name="person">
    Person: {{content.firstName}}
</script>
<script type="text/x-handlebars" data-template-name="application">
    {{outlet}}
</script>

干杯

4

2 回答 2

2

我相信 JSON 是不正确的。

{"persons": {"firstName": "Jeff","lastName": "Atwood"}}

执行 App.Person.find(params.person_id) 时,根元素应为“person”

{"person": {"firstName": "Jeff","lastName": "Atwood"}}

我也不相信您需要 PersonRoute ,因为默认情况下路由应该执行:

App.PersonRoute = Ember.Route.extend({
  model: function(params) {
    return App.Person.find(params.person_id) ;
  }
});

当您的动态路径段中包含“*_id”时。

于 2013-01-21T12:23:49.650 回答
1

尝试删除 PersonRoute,默认模型挂钩应该没问题。我认为这里发生的是 App.Person.find(params) 发送 findQuery() 而不是 find(id)。

于 2013-01-21T09:54:42.250 回答