Ember.js-使路线和模型协同工作

jd182

我正在学习Ember.js,但正在努力弄清为什么我的路线无法正常工作。

这是我的app.js的相关部分:

// Routes
App.Router.map(function() {

   this.resource('posts', { path: '/posts' });
   this.resource('post', { path: '/post/:id' });

});

// Handle route for posts list
App.PostsRoute = Ember.Route.extend({

    model: function() {
        return App.Post.findAll();
    }

});

// Handle route for single post
App.PostRoute = Ember.Route.extend({

    model: function(params){

        return App.Post.findById(params.id);
    }

});

// Post model
App.Post = Ember.Object.extend();

App.Post.reopenClass({
    findAll: function(){

        var posts = [];

        $.getJSON("/api/posts").then(function(response){

            response.posts.forEach(function(post){

                posts.pushObject(App.Post.create(post));

            });

        });

        return posts;
    },
    findById: function(id){

        $.getJSON("/api/post/" + id).then(function(response){

            return App.Post.create(response.post);

        });

    }
});

然后在我的模板中有这个:

<!-- Post list -->
<script type="text/x-handlebars" data-template-name="posts">
    <div class="large-12 columns">
        <h1>Posts</h1>
        <hr>
        <ul>
            {{#each post in model}}
                <li>{{#linkTo 'post' post}}{{post.title}}{{/linkTo}}</li>
            {{/each}}
        </ul>
    </div>
</script>

<!-- Single post -->
<script type="text/x-handlebars" data-template-name="post">
    <div class="large-12 columns">
        <h1>{{title}}</h1>
        <div class="content">
            {{post_content}}
        </div>
    </div>
</script>

我在这里有几个问题。首先,帖子列表中的链接上的href属性如下所示:

#/post/<App.Post:ember217>

我可以通过将发布路线更改为:

this.resource('post', { path: '/post/:post_id' });

但是,当我尝试通过使用URL直接导航到帖子时,/#/post/1出现错误:Assertion failed: Cannot call get with 'id' on an undefined object.

最后,如果我离开了发布路线(/post/:id),然后访问URL,则/#/post/1不会显示任何发布数据。我可以看到调用了正确的API端点,并且控制台中未显示任何错误。

但是,如果我单击从帖子列表中的单个帖子,则该帖子将正确显示,但是它使用了我之前提到的怪异URL- #/post/<App.Post:ember217>

如果有帮助,这是创建帖子模型的JSON:

{"post":
   {
      "id":2,
      "title":"Second post",
      "alias":"second-post",
      "postedOn":"2013-08-12 09:11:37",
      "authorId":1,
      "post_content":"Post content"
   }
 }

抱歉,我知道那里有很多东西-我希望足以清楚地说明我做错了什么。

谢谢

马西奥·朱尼(Marcio Junior)

您收到此网址的#/post/<App.Post:ember217>原因是/post/:id您的动态细分为,因此您必须将其更改yourmodel_id/post/:post_id使用此方法,默认情况下,routeserialize方法将知道您想要urlid属性post:/ post / 1,/ post / 2等。在这种情况下,不需要重写。

您已经说过,更改为post_id可以使url生成正常工作,但是导航不可以,当直接导航到url时,问题不在于路由,我认为这是因为您使用的是:

App.Post.findById(params.id);

您必须更新为:

App.Post.findById(params.post_id);

我看到的另一个问题(不知道是否是拼写错误),您忘记了returnajax调用:

findById: function(id){
  // you must return the ajax  
  return $.getJSON("/api/post/" + id).then(function(response){

    return App.Post.create(response.post);

  });

}

希望对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

让 Inertia.js 和 Xampp 协同工作

来自分类Dev

Ember.js模型继承和模板

来自分类Dev

Ember.js模型继承和模板

来自分类Dev

在Ember JS中查询模型

来自分类Dev

Ember.js文件上传以更改路线模型

来自分类Dev

Ember.js文件上传以更改路线模型

来自分类Dev

Django和Ember.js

来自分类Dev

ember.js - 在模态和自己的路线上更新表单?

来自分类Dev

Ember.js-Ember数据未返回模型

来自分类Dev

无法使用Ember筛选模型。在Ember.js中选择

来自分类Dev

在Ember.js中创建灯箱路线

来自分类Dev

如何使Reveal.js与演示者远程协同工作?

来自分类Dev

PHP、JS、HTML 和 CSS 文件如何在同一页面上协同工作?

来自分类Dev

多个出口的Ember.js负载模型

来自分类Dev

Ember.js RESTful模型关系

来自分类Dev

Ember.js不更新模型

来自分类Dev

Ember.js:直接加载相关模型

来自分类Dev

Ember.js-无法呈现嵌套模型

来自分类Dev

Ember.js RESTful模型关系

来自分类Dev

多个出口的Ember.js负载模型

来自分类Dev

Ember.js:子模型的计算属性

来自分类Dev

Ember js 过滤模型中的数据

来自分类Dev

具有角色和状态的Ember.js模型架构

来自分类Dev

ember.js clearInterval无法正常工作

来自分类Dev

ember.js clearInterval无法正常工作

来自分类Dev

Ember.js的JavaScript语法如何工作?

来自分类Dev

如何使用Ember.js和Ember Data通过联接模型数据对多对多排序

来自分类Dev

如何从ember-CLI判断ember.js和ember-data版本?

来自分类Dev

如何整合amcharts和Ember.js?