首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ember数据添加不必要的记录

Ember数据添加不必要的记录
EN

Stack Overflow用户
提问于 2014-08-23 20:17:55
回答 1查看 73关注 0票数 0

假设我有一个关于动画的应用程序。我希望能够使用以下任何一个urls访问相同的动画:

/a/foo/1

/a/foo

/a/1

因此,我的路由器被定义为:

代码语言:javascript
复制
// router.js
Router.map(function() {
    this.resource('animes', { path: '/a/' }, function() {
        this.route('add');
        this.route('remove');
    });
    this.resource('anime', { path: '/a/:anime_id' });
    this.resource('anime', { path: '/a/:slug/:anime_id' }, function() {
        this.route('edit');
    });
});

我的anime route看起来是这样的:

代码语言:javascript
复制
// routes/anime.js
var AnimeRoute = Ember.Route.extend({
        afterModel: function(anime, transition) {
            // redirect to the url /a/foo/1
        if(anime.get('slug') !== transition.params.anime.slug) {
            this.replaceWith('anime', anime);
        }
    },
    serialize: function(anime) {
        return {
            slug: anime.get("slug"),
            anime_id: anime.get("id")
        };
    } 
});

export default AnimeRoute;

我的后端被配置成返回正确的数据,不管发送的是id还是段塞。

/a/foo/1/a/1形式的url没有问题,但在url:/a/foo的情况下,成员检查器显示有额外的记录{id: foo, title: undefined, slug: undefined, ...: undefined}

怎么解决这个问题?

编辑:这里有一个说明问题的jsbin:http://emberjs.jsbin.com/rasewowapocu/2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-23 23:01:16

因为您有this.resource(‘动漫’,{ path:‘/a/:动漫_ id’});在您的路线图中,/a/foo将与此匹配,并假设foo是id。由于后端返回数据,无论发送什么,这可能会使事情变得一团糟。我想,如果您像这样覆盖AnimeRoute的模型函数,它应该会工作:

代码语言:javascript
复制
App.AnimeRoute = Ember.Route.extend({
        model: function(params) {          
          var slug_or_id = params.anime_id;
          if(jQuery.isNumeric(slug_or_id)){ //id
                  return this.store.find('anime',slug_or_id);    
          }else{ //slug
                  return this.store.find('anime', { slug: slug_or_id }).then(function(a) {                      
                           return a.get('firstObject');
                  });   
          }          
    },
    afterModel: function(anime, transition) {
                // redirect to the url /m/foo/1
            if(anime.get('slug') !== transition.params.anime.slug) {
                this.replaceWith('anime', anime);
            }..

编辑:添加了iguider提示,只返回第一个对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25465988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档