Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何从emberjs中的嵌套资源后端获取模型_Ember.js - Fatal编程技术网

Ember.js 如何从emberjs中的嵌套资源后端获取模型

Ember.js 如何从emberjs中的嵌套资源后端获取模型,ember.js,Ember.js,如何获取Ember.js中嵌套的模型。我的意思是,我有一个叫做post的模型。在我的端点中,我有一个路径来获取所有帖子,并获取带有id的特定帖子。但是,例如,如果我显示一个特定的帖子,我如何才能获得与该帖子点击按钮相关的所有评论 我在后端的路由是/posts/:post\u id/comments 谢谢你可以试试插件 它允许通过url模板指定所需的url。现在,ember数据url模板正在早期开发中 // console ember install ember-data-url-template

如何获取Ember.js中嵌套的模型。我的意思是,我有一个叫做
post
的模型。在我的端点中,我有一个路径来获取所有
帖子
,并获取带有
id的特定
帖子
。但是,例如,如果我显示一个特定的
帖子
,我如何才能获得与该
帖子
点击按钮相关的所有
评论

我在后端的路由是
/posts/:post\u id/comments

谢谢你可以试试插件

它允许通过url模板指定所需的url。现在,
ember数据url模板
正在早期开发中

// console
ember install ember-data-url-templates
ember generate ember-data-url-templates

// adapters/comment.js
// add UrlTemplates mixin to your `Adapter` and specify url templates 
import DS from "ember-data";
import UrlTemplates from "ember-data-url-templates";

export default DS.RESTAdapter.extend(UrlTemplates, {
  urlTemplate: '{+host}/posts/{postId}/comments{/id}',

  urlSegments: {
    postId(type, id, snapshot, query) {
      return snapshot.belongsTo('post', { id: true });
    }
  }

});
你可以试试插件

它允许通过url模板指定所需的url。现在,
ember数据url模板
正在早期开发中

// console
ember install ember-data-url-templates
ember generate ember-data-url-templates

// adapters/comment.js
// add UrlTemplates mixin to your `Adapter` and specify url templates 
import DS from "ember-data";
import UrlTemplates from "ember-data-url-templates";

export default DS.RESTAdapter.extend(UrlTemplates, {
  urlTemplate: '{+host}/posts/{postId}/comments{/id}',

  urlSegments: {
    postId(type, id, snapshot, query) {
      return snapshot.belongsTo('post', { id: true });
    }
  }

});

我发现访问嵌套资源的最佳方法(如果可以修改API的话)是让API在json中返回一个“links”属性以供注释。例如,返回的json如下所示:

{
    "post": {
        "id": 1,
        "links": {
            "comments": "http://localhost:3000/posts/1/comments"
        }
    }
}
现在,您可以在ember应用程序中定义关系,并在路线中获取模型:

// models/post.js

import DS from 'ember-data';

export default DS.Model.extend({
  comments: DS.hasMany('comments', {async: true}); 
});

// models/comment.js

import DS from 'ember-data';

export default DS.Model.extend({
  post: DS.belongsTo('post', {async: true}); 
});


// post.js
import Ember from 'ember';

export default Ember.Route.extend({
    model: function(params) {
         return this.store.find('post', params.post_id);
    }    
});
现在,当您在模板中调用

{{#each model.comments as |comment|}}
     {{comment.comment_attribute}}
{{/each}}
Ember将在/posts/:post_id/comments处发出异步请求并获取评论。如果您希望在请求发生时显示加载图标或其他内容,可以将其包装在

   {{#if model.comments}}
     {{#each model.comments as |comment|}}
       {{comment.comment_attribute}}
     {{/each}}
   {{else}}
      <!-- Something to do while loading -->
   {{/if}}

我发现访问嵌套资源的最佳方法(如果可以修改API的话)是让API在json中返回一个“links”属性以供注释。例如,返回的json如下所示:

{
    "post": {
        "id": 1,
        "links": {
            "comments": "http://localhost:3000/posts/1/comments"
        }
    }
}
现在,您可以在ember应用程序中定义关系,并在路线中获取模型:

// models/post.js

import DS from 'ember-data';

export default DS.Model.extend({
  comments: DS.hasMany('comments', {async: true}); 
});

// models/comment.js

import DS from 'ember-data';

export default DS.Model.extend({
  post: DS.belongsTo('post', {async: true}); 
});


// post.js
import Ember from 'ember';

export default Ember.Route.extend({
    model: function(params) {
         return this.store.find('post', params.post_id);
    }    
});
现在,当您在模板中调用

{{#each model.comments as |comment|}}
     {{comment.comment_attribute}}
{{/each}}
Ember将在/posts/:post_id/comments处发出异步请求并获取评论。如果您希望在请求发生时显示加载图标或其他内容,可以将其包装在

   {{#if model.comments}}
     {{#each model.comments as |comment|}}
       {{comment.comment_attribute}}
     {{/each}}
   {{else}}
      <!-- Something to do while loading -->
   {{/if}}

您可以在rest适配器中创建自定义构建URL

我当前正在使用的我的(仅用于
/posts/:post\u id/comments


您可以在rest适配器中创建自定义构建URL

我当前正在使用的我的(仅用于
/posts/:post\u id/comments


使用JSON API 1.0规范进一步扩展@filby的答案,该规范使用了新的
JSONAPIAdapter
,下面的代码可以工作

来自服务器的单个Post响应

'data': {
    'type': 'posts',
    'id': 1,
    'attributes': {
        'title:'A new post'
    },
    'relationships': {
        'comments': {
            'links':{
                'related': '/api/posts/1/comments'
             }
         }
    }
}
后期模型

// models/post.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';

export default Model.extend({
  title: attr('string')
  comments: hasMany('comments'); 
});
// models/comment.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({
  post: belongsTo('post', {async: true}); 
  likes: attr('number')
});
评论模型

// models/post.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';

export default Model.extend({
  title: attr('string')
  comments: hasMany('comments'); 
});
// models/comment.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({
  post: belongsTo('post', {async: true}); 
  likes: attr('number')
});
邮政路线

// post.js
import Ember from 'ember';

export default Ember.Route.extend({
    model: function(params) {
         return this.store.findRecord('post', params.post_id);
    }    
});
{{#each model.comments as |comment|}}
     {{comment.likes}}
{{/each}}
帖子模板

// post.js
import Ember from 'ember';

export default Ember.Route.extend({
    model: function(params) {
         return this.store.findRecord('post', params.post_id);
    }    
});
{{#each model.comments as |comment|}}
     {{comment.likes}}
{{/each}}

注释请求将是
/api/posts/1/comments
,它在
相关的
属性中指定。

使用JSON api 1.0规范进一步扩展@filby的答案,该规范使用了新的
JSONAPIAdapter
,下面的代码可以工作

来自服务器的单个Post响应

'data': {
    'type': 'posts',
    'id': 1,
    'attributes': {
        'title:'A new post'
    },
    'relationships': {
        'comments': {
            'links':{
                'related': '/api/posts/1/comments'
             }
         }
    }
}
后期模型

// models/post.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';

export default Model.extend({
  title: attr('string')
  comments: hasMany('comments'); 
});
// models/comment.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({
  post: belongsTo('post', {async: true}); 
  likes: attr('number')
});
评论模型

// models/post.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';

export default Model.extend({
  title: attr('string')
  comments: hasMany('comments'); 
});
// models/comment.js

import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';

export default Model.extend({
  post: belongsTo('post', {async: true}); 
  likes: attr('number')
});
邮政路线

// post.js
import Ember from 'ember';

export default Ember.Route.extend({
    model: function(params) {
         return this.store.findRecord('post', params.post_id);
    }    
});
{{#each model.comments as |comment|}}
     {{comment.likes}}
{{/each}}
帖子模板

// post.js
import Ember from 'ember';

export default Ember.Route.extend({
    model: function(params) {
         return this.store.findRecord('post', params.post_id);
    }    
});
{{#each model.comments as |comment|}}
     {{comment.likes}}
{{/each}}

评论请求将是
/api/posts/1/comments
,它在
相关的
属性中指定。

您可以发布一些您尝试过的代码吗?有几种方法可以做到这一点。据我所知,没有直接的方法来处理嵌套资源api。关于嵌套资源api支持的讨论由来已久:。如果您管理后端,您可能会发现更改后端api以避免使用嵌套资源更简单。嵌套是指嵌入?您可以发布一些您尝试过的代码吗?有几种方法可以做到这一点。据我所知,没有直接的方法来处理嵌套资源api。关于嵌套资源api支持的讨论由来已久:。如果您管理后端,您可能会发现更改后端api以避免使用嵌套资源更简单。嵌套是指嵌入?这仍然是我们应该做的吗?如果我是您,我会提交PR以更新ember data 2.0的“ember数据url模板”。我确信只有一些词需要改变。我想,但我上周才开始使用余烬。似乎有点早。:)同意:)我会在周末看看这个。FWIW:我已经在生产中使用了约6个月的余烬数据url模板。如果您最终尝试了它并遇到任何问题,请告诉我:)这仍然是我们应该做的事情吗?如果我是您,我会提交PR以更新ember data 2.0的“ember数据url模板”。我确信只有一些词需要改变。我想,但我上周才开始使用余烬。似乎有点早。:)同意:)我会在周末看看这个。FWIW:我已经在生产中使用了约6个月的余烬数据url模板。如果您最终尝试并遇到任何问题,请告诉我:)