2013-02-20 58 views
1

我剛開始使用Ember和Ember Data。我有一個非常簡單的服務,它打到我的後端服務(用Node編寫)。我的服務返回兩個項目。在我的HTML中,我的兩個項目顯示,或者至少是他們的ID。其他屬性不呈現。使用Ember數據,但模型上的屬性未呈現

結果:

* Hello, 1 ! 
* Hello, 2 ! 

app.js

var App = Ember.Application.create(); 

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

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

App.Router.map(function() { 
    this.route("grunts", { path: "/grunts" }); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('grunts'); 
    } 
}); 

App.GruntsRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Grunt.find(); 
    } 
}); 

的index.html

<script type="text/x-handlebars" data-template-name="application"> 
    <div> 
     <p>{{outlet}}</p> 
    </div> 
</script> 

<script type="text/x-handlebars" data-template-name="grunts"> 
    <ul> 
     {{#each controller}} 
      <li>Hello, {{id}} {{firstName}} {{lastName}}!</li> 
     {{/each}} 
    </ul> 
</script> 

JSON:

{ 
    "grunts": [ 
     { 
      "id": 1, 
      "firstName": "Joe", 
      "lastName": "Bloggs" 
     }, 
     { 
      "id": 2, 
      "firstName": "Someone", 
      "lastName": "Else" 
     } 
    ] 
} 

感謝您的幫助!

回答

2

默認RESTAdapter映射是下劃線 - > camelized形式。這意味着如果您的模型屬性爲firstName,則服務器應發送包含first_name的JSON。

爲了解決這個問題,你可以發送JSON看起來像這樣:

"grunts": [ 
    { 
    "id": 1, 
    "first_name": "Joe", 
    "last_name": "Bloggs" 
    }] 

或者在你的RESTSerializer覆蓋keyForAttributeName功能。 對於一對一的映射,你可以這樣做:

keyForAttributeName: function(type, name) { 
    return name; 
} 

或映射一個單一的模式是這樣的:

adapter.map('App.Grunt', { 
    firstName: { keyName: 'firstName'}, 
    lastName: { keyName: 'lastName'} 
}); 
相關問題