0

我遇到了 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"
    }
  ]
}

当满足以下条件时会发生这种情况:

  • 用户转换到模型特定页面('movie/:movie_id')
  • 用户然后单击浏览器中的后退按钮或单击使用链接到车把助手创建的应用程序中的后退按钮

任何帮助将不胜感激。谢谢!

4

1 回答 1

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 和 MongoDB 的 _id

于 2013-07-28T21:06:19.873 回答