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)がfind(id)の代わりにfindQuery()を送信することだと思います。

于 2013-01-21T09:54:42.250 に答える