标签: ember-data

Ember-data嵌入记录当前状态?

我真的陷入了由Ember数据引起的大量问题,并且缺乏嵌入式记录支持.

我搜索了整个网络,大多数帖子已经过时,其他的已经过时+要求我使用第三方库或连接300行特殊代码有很多缺点.

我不知道如何使用嵌入式记录和今天的ember-data?

编辑:现在有一个新的文档http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html

ember.js ember-data

18
推荐指数
1
解决办法
5035
查看次数

我在哪里指定Ember数据中模型的复数?

我的模型类型以-y:Security结尾

我如何告诉Ember Data使用/证券代替/ securitys为此寻找资源?

ember.js ember-data

17
推荐指数
3
解决办法
7013
查看次数

ember-data:按需加载多个关联

(更新为ember-data API Rev 11 ...)

TL; DR

使用按需加载关联的正确方法是什么?特别是,一旦你加载子记录,你如何处理从服务器重新加载父记录清空hasMany数组的事实?我希望(也许不能)包括的子记录的ID在父的数组.还是有其他方法可以做到这一点,我错过了?DS.Adapter.findAssociation(...)DS.Adapter.findHasMany(...)hasMany

作为旁注,我很困惑应该在关键链接的hasMany/ belongsTo定义中传递哪些选项(如果我没有侧载数据或ID数组,我应该使用映射吗?),所以如果你认为我的问题可以在我的协会定义中,你很有可能是对的.

长版

我正在编写自己的子类,DS.RESTAdapter将ember-data绑定到ASP.NET WebAPI后端(使用Entity Framework).到目前为止一切都那么好,但我有一段时间让协会正常工作.

类似这样的海报,我注意到烬数据的头版 使用地说,如果你有一个hasMany在你的模型关联,你get该财产,商店会发出为孩子记录的请求.从页面引用:

如果您要请求个人资料,请执行以下操作:

author.get('profile');
Run Code Online (Sandbox Code Playgroud)

... REST适配器会向URL/profiles发送请求吗?author_id = 1.

这意味着如果你没有侧载并且不包含一组id,会发生这种情况.我意识到这些文档有点过时了,但是我无法在API版本7或更新的版本9中实现这一点.但是在版本9中我确实找到了findAssociation方法,在版本11中有findHasMany方法,我猜是可能已经用来实现这一点,我现在正在尝试使用它.

为什么不包括一组id或sideload?

我不想做的三个主要原因(可能不能):

  1. 使用ASP.NET WebAPI如何做这些事情并不明显,至少不是我使用的基于装饰的简单方法.而且,我现在非常喜欢后端的简单性和轻薄性,使用EF和WebAPI它几乎完全是每个实体的样板,我已经完成了!我甚至可以"免费"获得OData过滤支持.

  2. 我的子记录通常会通过昂贵的查询生成(例如聚合...指标汇总).并且单个父实体有许多不同类的子实体.因此,即使为所有子类型获取ID 也会很昂贵,并且生成和侧载所有子记录都是不可能的.

  3. 我有子实体,主键是复合键.我还没有看到这样的例子甚至在ember-data中得到支持/可能,至少不是用于处理关联(例如,你将如何做一组id?).我在我的客户端模型中创建了一个计算属性,它将复合键强制转换为单个字符串,因此我可以使用从存储中检索单个记录find(...),但是我再也不知道它如何与关联一起工作.

试着用 findAssociationfindHasMany

我已经发现在API版本9(和一些早期版本但不是全部?) 11中,我可以实现该方法来检索关联的子记录.这大部分都有效,但需要一些体操.这是我的通用方法:DS.Adapter.findAssociation DS.Adapter.findHasManyhasManyfindAssociation findHasMany

findHasMany: function (store, record, relationship, ids) {

    var adapter = this; …
Run Code Online (Sandbox Code Playgroud)

ember.js asp.net-web-api ember-data

17
推荐指数
1
解决办法
4128
查看次数

如何使嵌入式hasMany关系与ember数据一起使用

我无法embedded hasMany使用ember数据正常工作.

我有类似的东西

App.Post = DS.Model.extend({
  comments: DS.hasMany('App.Comment')
});

App.Comment = DS.Model.extend({
  post: DS.hasMany('App.Post'),
  name: attr('string')
});
Run Code Online (Sandbox Code Playgroud)

我的API返回以下内容GET /post:

[
  {
   id: 1
   comments: [{name: 'test'}, {name: 'test2'}]
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

我需要发送以下内容POST /post:

[
  {
    comments: [{name: 'test'}, {name: 'test2'}]
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

我想与Ember模型合作并让他们提出适当的要求:

var post = App.store.createRecord(App.Post, hash_post_without_comments);
post.get('comments').createRecord(hash_comment);

App.store.commit(); // This should call the POST api 
Run Code Online (Sandbox Code Playgroud)

var posts = App.store.find(App.Post); // This should call the GET api 
Run Code Online (Sandbox Code Playgroud)

当我尝试类似的东西时post: DS.hasMany('App.Post', {embedded: …

javascript ember.js ember-data

17
推荐指数
4
解决办法
1万
查看次数

ember Uncaught Error:断言失败:清空inBuffer状态的视图

我在运行下面的代码时得到了这个断言:

不允许在inBuffer状态下清空视图,在正常情况下不应该这样做.很可能您的应用程序中存在错误.这可能是由于过多的财产变更通知.

链接到演示:http: //plnkr.co/edit/s3bUw4JFrJvsL690QUMi

var App = Ember.Application.create({
  Store: DS.Store.extend({
    revision: 4,
    adapter: DS.FixtureAdapter.create()
  }),

  Router: Ember.Router.extend({
    root: Ember.Route.extend({
      index: Ember.Route.extend({
        route: "/",
        connectOutlets: function(router){
          var person;
          person = App.Person.find(657);
          person.addObserver("isLoaded", function() {
            return router.get('router.applicationController').connectOutlet("things", person.get("things"));
          });
        }
      })
    })
  }),

  ApplicationController: Em.Controller.extend(),

  ApplicationView: Em.View.extend({
    template: Em.Handlebars.compile("{{outlet}}")
  }),

  ThingsController: Em.ArrayController.extend({
    thingTypes: (function() {
      return App.ThingType.find();
    }).property()
  }),

  ThingsView: Em.View.extend({
    template: Em.Handlebars.compile([
      '{{#each controller.thingTypes}}', 
        '{{this.name}}', 
      '{{/each}}',
      '{{#each controller.content}}', 
        '{{this.title}}', 
      '{{/each}}'].join(""))
  }),

  //MODELS
  Person: DS.Model.extend({
    things: DS.hasMany('App.Thing', {
      embedded: true …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data ember-old-router

17
推荐指数
1
解决办法
1747
查看次数

Ember.js数组作为模型的属性

干杯! 我有一些模型,它的一个属性是一个数组,但由于某些原因(我在服务器上使用mongoDB,这是嵌入式模型和ember数据的问题)我不能做这样的事情:

App.Foo = DS.Model.extend({
  ...
  numbers: DS.hasMany('App.Bar')
)};

App.Bar = DS.Model.extend({
  ...
  number: DS.attr('number')
});
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

App.Bar = DS.Model.extend({
  numbers: DS.attr('array')
});
Run Code Online (Sandbox Code Playgroud)

但是在ember-data中没有数组类型的属性,怎么样?

javascript ember.js ember-data

17
推荐指数
1
解决办法
2万
查看次数

从Ember.Route中访问参数的正确方法是什么.setupController?

Ember.Route.model有权访问params变量,但Ember.Route.setupController没有.这对我来说很麻烦,因为我的路径有多个动态段,我需要在我的模板中使用所有这些段.

具体来说,我的路径如下:/project/:project_id/task/:task_id.请注意,任务可以属于许多项目,而不仅仅是一个.因此,我们不能告诉我们正在查看的项目只是查看任务本身:我们必须使用URL中找到的项目ID.这是我目前正在做的事情:

App.TaskRoute = Ember.Route.extend({

  // This works just fine:
  serialize: function(model) {
    return {
      task_id: model.get('id'),
      project_id: this.modelFor('project').get('id')
    };
  },

  model: function(params) {
    this.set('parentProjectId', params.project_id);

    return App.Task.find(params.task_id);
  },

  setupController: function(controller, model) {
    var parentProject = this.modelFor('project') ?
                        this.modelFor('project') :
                        App.Project.find(this.get('parentProjectId'));
    controller.set('parentProject', parentProject);

    controller.set('content', model);
  }
});
Run Code Online (Sandbox Code Playgroud)

也许我是偏执狂,这只是感觉hacky.如果路由是为了访问参数,那么它已经params附加了一个属性.有没有更好的办法?

编辑:我对上面的代码做了一些更新.此外,我的路线看起来像这样:

App.Router.map(function() {
  this.resource('project', { path: '/project/:project_id' });
  this.resource('task', { path: 'project/:project_id/task/:task_id' });
});
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data ember-router

17
推荐指数
1
解决办法
2万
查看次数

在ember-data中保留父级和嵌入式记录

我有以下型号:

App.Company = DS.Model.extend({
  name:  DS.attr('string'),
  accounts: DS.hasMany('App.Account', {
    inverse: 'company'
  })
});

App.Account = DS.Model.extend({
  login:                 DS.attr('string'),
  first_name:            DS.attr('string'),
  last_name:             DS.attr('string'),
  email:                 DS.attr('string'),
  password:              DS.attr('string'),
  password_confirmation: DS.attr('string'),
  company:               DS.belongsTo('App.Company')
});
Run Code Online (Sandbox Code Playgroud)

该公司被定义为嵌入在帐户中:

DS.RESTAdapter.map('App.Account', {
  company: { embedded: 'always' }
});
Run Code Online (Sandbox Code Playgroud)

当我创建一个新帐户时,公司数据正确嵌入到帐户数据中,我看到了我期望在服务器端发出的POST请求:

Started POST "/accounts" for 127.0.0.1 at 2013-06-27 13:30:53 +0200
Processing by AdminUsersController#create as JSON
  Parameters: {"account"=>{"login"=>"fsdfdf", "first_name"=>"fgdfgh", "last_name"=>"fsfdsfdsfsd@fgfdgdfgf.de", "email"=>"dsfdsgds@frgdfgfgdfg.de", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "company"=>{"name"=>"gfdhgtrhzrh"}}}
Run Code Online (Sandbox Code Playgroud)

但是,我也看到了公司本身的额外POST请求:

Started POST "/companies" for 127.0.0.1 at 2013-06-27 13:30:53 +0200
Processing by CompaniesController#create as JSON
  Parameters: {"company"=>{"name"=>"gfdhgtrhzrh"}} …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

17
推荐指数
1
解决办法
452
查看次数

Ember组件sendAction()无法正常工作

在过去的几个小时里,我一直在努力解决这个问题,我正在制作一个用于创建发票的余烬应用程序.我正在使用ember组件(textfield)使用键盘修改字段,但由于操作不会发送回相关的控制器,我无法将记录保存在focusOut或insertNewLine上,并且没有任何事情发生.我在用 :

Ember      : 1.1.2 
Ember Data : 1.0.0-beta.3 
Handlebars : 1.0.0 
jQuery     : 1.9.1
Run Code Online (Sandbox Code Playgroud)

这应该是这样的:https://dl.dropboxusercontent.com/u/7311507/embercomponent.png

问题似乎在控制器或组件内,似乎我缺少一些东西.

在组件上调用console.log函数,sendAction调用永远不会...

谢谢您的帮助.

ItemsRoute

App.ItemsRoute = Ember.Route.extend({
    renderTemplate: function() {
          // Render default outlet   
          this.render();
          // render extra outlets
          this.render("client", { outlet: "client", into: "application"});
      },
      model: function() {
        return this.store.find('item');
      }
    });
Run Code Online (Sandbox Code Playgroud)

上述ItemsController

App.ItemsController = Em.ArrayController.extend({
    actions: {
      createItem: function () { // NEVER GETS CALLED FROM COMPONENT
        var title = "Nouvel élément"

        // Create the new Todo model
        var …
Run Code Online (Sandbox Code Playgroud)

javascript ember.js ember-data

16
推荐指数
1
解决办法
1万
查看次数

emberjs无法克隆未实现Ember.Copyable的Ember.Object

我使用的是ember 1.3.1和ember-data 1.0.0-beta.5.在创建新模式时,我收到以下错误

断言失败:无法克隆未实现Ember.Copyable的Ember.Object

以下是我的型号代码

App.myModel = DS.Model.extend({name:DS.attr('string'),age:DS.attr('string')});

在我的创建路线模型功能

return Em.Object.create({});

最后保存我做了以下

this.store.createRecord('property',this.get('model'));

尽管出现错误,但我的后端服务已成功调用并保存了新模型.

请指导.

谢谢

ember.js ember-data

16
推荐指数
2
解决办法
6802
查看次数