2013-07-28 196 views
0

我有一個問題,其中Ember繼續追加相同的路由模型到路由。Ember追加相同的模型路由

# ROUTER 
MediaUi.Router.map(function() { 
    this.route('movie', { path: '/movie/:id' }); 
}); 

# ROUTE 
MediaUi.IndexRoute = Ember.Route.extend({ 
    'model': function() { 
    return MediaUi.Media.find(); 
    } 
}); 

# MODEL 
MediaUi.Media = DS.Model.extend({ 
    'type':  DS.attr('string'), 
    'title': DS.attr('string'), 
    'director': DS.attr('string'), 
    'year':  DS.attr('number'), 
    'url':  DS.attr('string'), 
    'media': DS.attr('string'), 
    '_id':  DS.attr('string'), 
    'description': DS.attr('string', { 'defaultValue': 'TBD' }) 
});x 

DS.RESTAdapter.map('MediaUi.Media', { 
    'id': { 'key': '_id' } 
}); 

DS.RESTAdapter.reopen({ 
    url: 'http://localhost:3000' 
}); 


#TEMPLATE 
<table class="table"> 
    <thead> 
     <tr> 
      <th>Title</th> 
      <th>Description</th> 
      <th>Actions</th> 
     </tr> 
    </thead> 
    {{#each item in model}} 
    <tr {{ bindAttr data-id="item._id" }}> 
     <td>{{#linkTo 'movie' item }} {{ item.title }} {{/linkTo}}</td> 
     <td><p>{{ item.description }}</p></td> 
     <td> 
      <button {{ action "launchModal" item target="view" }} class="btn btn-info">More Information</button> 
      <button class="btn btn-warning">Edit</button> 
      <button class="btn btn-danger">Remove</button> 
     </td> 
    </tr> 
    {{/each}} 
</table> 

{{ view MediaUi.ModalView }} 

# JSON 


{ 
    "medias": [ 
    { 
     "type": "movie", 
     "title": "The Dark Knight", 
     "director": "Christopher Nolan", 
     "year": 2008, 
     "url": "http://www.imdb.com/title/tt0468569/", 
     "media": "Blu-ray", 
     "_id": "51e2fc1b4c19500de6000001" 
    }, 
    { 
     "type": "movie", 
     "title": "Inception", 
     "director": "Christopher Nolan", 
     "year": 2010, 
     "url": "http://www.imdb.com/title/tt1375666/", 
     "media": "Blu-ray", 
     "_id": "51e2fc1b4c19500de6000002" 
    }, 
    { 
     "type": "movie", 
     "title": "The Dark Knight Rises", 
     "director": "Christopher Nolan", 
     "year": 2012, 
     "url": "http://www.imdb.com/title/tt1345836/", 
     "media": "Blu-ray", 
     "_id": "51e2fc1b4c19500de6000003" 
    }, 
    { 
     "type": "movie", 
     "title": "Django Unchained", 
     "director": "Quentin Tarantino", 
     "year": 2012, 
     "url": "http://www.imdb.com/title/tt1853728/", 
     "media": "Blu-ray", 
     "_id": "51e2fc1b4c19500de6000004" 
    }, 
    { 
     "type": "movie", 
     "title": "City of God", 
     "director": "Kátia Lund,Fernando Meirelles", 
     "year": 2002, 
     "url": "http://www.imdb.com/title/tt0317248/", 
     "media": "DVD", 
     "_id": "51e2fc1b4c19500de6000005" 
    } 
    ] 
} 

這種情況發生在以下滿足:

  • 用戶Transitione到模型特定頁面(「電影/:movie_id」)
  • 用戶,然後單擊後退按鈕在瀏覽器或點擊在應用程序中創建一個後退按鈕linkTo車把手幫手

任何幫助將不勝感激。謝謝!

回答

0

如果有人遇到此問題,這可能與您的後端有關。就我而言,事實上MongoDB使用_id而不是id作爲標識符,而Ember將id作爲主鍵 - 記錄您的記錄。因此,您需要創建一個適配器來序列化此差異並適當地配置您的應用程序。

在我來說,我不得不做以下幾點:

MediaUi.Adapter = DS.RESTAdapter.extend({ 
    serializer: DS.RESTSerializer.extend({ 
    primaryKey: function(type){ 
     return '_id'; 
    } 
    }) 
}); 

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

參考:Ember, Ember Data and MongoDB's _id