标签: ember-data

Ember数据多态关联

有没有人想出多态关联和余烬数据的答案?

我们需要一些能够从我所知道的方式查询关系另一端的类型的方法.

有人对此有何看法?

ember.js ember-data

13
推荐指数
2
解决办法
4466
查看次数

没有Ember Data的Ember

Ember数据仍未达到版本1.0,因此我决定使用Ember而不使用Data模型.

我有自己的模型,这些模型由路径模型函数创建.

但是,保持前端对象和后端对象之间的状态是一场噩梦.特别是当一条路线使用其他路线模型时.

  • 如果我自己创建商店和模型查找方法,怎么能实现呢?
  • 我应该使用Ember Data(即使它不是1.0版本吗?)也许是Ember Data 1.0上的ETA?
  • 每当我更改模型时,编写代码来更新前端的模型?
  • 另一种方法?

我正在做最好的做法,还是我应该采取不同的做法?我的直觉是,如果不使用Ember Data,我应该写自己的商店.我很乐意收到你们中的一些人的反馈.

模型示例:

App.Person = Ember.Object.extend(App.Serializable,Em.Copyable,{
  user_email : null //used in routing dynamic segements and as old email when making changes to email
  ,first_name: null
  , last_name: null
  , fullname : function () {
    return this.first_name + ' ' + this.last_name;
  }.property('first_name','last_name').cacheable()
};

App.Person.reopenClass({
  createRecord: function(data) {
    return App.Person.create({
      user_email : data.email
      , first_name: data.first_name
      , last_name : data.last_name
}});
Run Code Online (Sandbox Code Playgroud)

我如何加载类模型的示例:

App.UsersRoute = App.AuthenticatedRoute.extend( {
  model : function () { …
Run Code Online (Sandbox Code Playgroud)

javascript model-view-controller ember.js ember-data

13
推荐指数
1
解决办法
3003
查看次数

Ember Data属于选择下拉视图

我试图用Ember和Ember Data做一些非常基本的事情.

1)帖子属于用户; 用户有很多帖子

2)在创建新的Post表单中,我想要选择/下拉所有用户

3)当我编辑帖子(使用相同的表单)时,我想将其正确绑定回dropbox

问题:执行与用户列表绑定的下拉列表的最佳做法是什么?如何绑定编辑表单以再次填充下拉列表?

用户模型:

App.User = DS.Model.extend({
  posts: DS.hasMany('post', {async: true}),
});
Run Code Online (Sandbox Code Playgroud)

邮政模式:

App.Post = DS.Model.extend(Ember.Validations.Mixin, {
  user: DS.belongsTo('user', {async: true}),
});
Run Code Online (Sandbox Code Playgroud)

创建新的职位表格:

{{view Em.Select
  content=users <<<<< How do I bind this.store.find("user") here?
  optionValuePath='content.id'
  optionLabelPath='content.name'
}}
Run Code Online (Sandbox Code Playgroud)

我不明白将选择内容与用户绑定的最佳做法.

尝试1:

*我使用的是Ember-Form

  {{em-select
    property="user_id"
    label="user"
    prompt="Select user:"
    content=controllers.users.content
    optionValuePath="content.id"
    optionLabelPath="content.first_name"
  }}
Run Code Online (Sandbox Code Playgroud)

在保存操作上:

newItem.set('user', this.store.getById('user', this.get('user_id')));
Run Code Online (Sandbox Code Playgroud)

我尝试使用user_id作为表单的属性,并在保存时转换回用户对象以分配给帖子.但是,这种方法有点愚蠢,因为我每次保存时都会主动将user_id转换为用户对象.我觉得应该有一种方法可以自动完成,如果我做了正确的绑定,而不是跳过箍来绑定属性user_id.当我使用相同的表单编辑帖子时,这也使我很难绑定回来.由于已经建立了所有的关系,我觉得我在这里做错了.我认为必须有更好的方法.

谢谢!

ember.js ember-data

13
推荐指数
2
解决办法
3145
查看次数

如何在ember cli生成的模型中设置rest适配器

我试图让我的余烬模型使用远程rails api.我试过扩展DS.RESTAdapter,但我不知道如何告诉模型使用这些设置.我的模型永远不会到达localhost:3000.

    //app.js
    import Ember from 'ember';
    import Resolver from 'ember/resolver';
    import loadInitializers from 'ember/load-initializers';

    Ember.MODEL_FACTORY_INJECTIONS = true;

    var App = Ember.Application.extend({
      modulePrefix: 'friend-ember-app', // TODO: loaded via config
      Resolver: Resolver
    });
    App.ApplicationAdapter = DS.RESTAdapter.extend({
        host: 'localhost:3000',
        namespace: 'api/v1'
    });

    loadInitializers(App, 'friend-ember-app');

    export default App;
Run Code Online (Sandbox Code Playgroud)

//

    //models/event.js
    import DS from 'ember-data';

    export default DS.Model.extend({
        title: DS.attr('string'),
        description: DS.attr('string')
    });
Run Code Online (Sandbox Code Playgroud)

//

    // controllers/index.js 
    import Ember from 'ember';

    export default Ember.Controller.extend({
        columns: function(){
            //Attempting to see request to remote api
            var events …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data ember-cli

13
推荐指数
1
解决办法
7286
查看次数

使用余烬数据的非CRUD操作

假设我有以下ember-data模型:

App.Person = DS.Model.extend({
    firstName: DS.attr('string'),
    lastName:  DS.attr('string'),
    starred:   DS.attr('boolean')
});
Run Code Online (Sandbox Code Playgroud)

这与使用以下非常标准的CRUD API的Rails应用程序通信:

GET    /people    - get a list of people
POST   /people    - create a new person
GET    /people/id - get a specific person
PUT    /people/id - update a specific person
DELETE /people/id - delete a specific person
Run Code Online (Sandbox Code Playgroud)

这些都使用标准存储/适配器映射到Ember-Data.

但是,让我们说,为了让一个人"明星化"或"解除明星化",API不允许我们通过标准更新操作来执行此操作.此操作有一个特定的API端点:

POST   /people/id/star   - mark a person as "starred"
POST   /people/id/unstar - mark a person as "unstarred"
Run Code Online (Sandbox Code Playgroud)

如何在Ember Data中使用此API?

看起来我需要以某种方式扩展DS.Store和DS.RESTAdapter,但我不确定让他们了解这些不同操作的最佳方法.对于应用程序的通用适配器必须知道主演人员,也感觉有点不对劲.

请注意,我无法控制API,因此我无法POST /people/id了解"主演",因此它适合标准更新.

javascript ember.js ember-data

12
推荐指数
2
解决办法
1949
查看次数

Ember数据:在一个请求中保存具有关联的模型

我有两个这样的关系的余烬模型

App.Foo = DS.Model.extend
   bar: DS.belongsTo("App.Bar", embedded: true)

App.Bar = DS.Model.extend
   primaryKey: "blah"
   blah: DS.attr "string
Run Code Online (Sandbox Code Playgroud)

如果我创建并保存这样的新记录:

foo = App.store.createRecord App.Foo
foo.set "bar", App.Bar.createRecord(blah: "blahblah")
App.store.commit()
Run Code Online (Sandbox Code Playgroud)

我看到2个帖子请求到服务器:

URL: /foos
Payload: {"foo":{"bar":null}}
Run Code Online (Sandbox Code Playgroud)

URL: /bars
Payload: {"bar":{"blah":"blahblah"}}
Run Code Online (Sandbox Code Playgroud)

该关联是嵌入式的,所以我希望看到:

URL: /foos
Payload: {"foo":{"bar":{"blah":"blahblah"}}}
Run Code Online (Sandbox Code Playgroud)

我可以使用ember-data REST适配器实现这一点,还是需要编写自己的代码来执行此操作?

javascript rest ember.js ember-data

12
推荐指数
1
解决办法
1775
查看次数

使用localStorage和REST远程服务器的数据层架构

任何人对如何实现同时使用localStorage和REST远程存储的数据持久层有任何想法或参考:

某个客户端的数据与localStorage一起存储(使用ember-data indexedDB适配器).本地存储的数据与远程服务器同步(使用ember-data RESTadapter).

服务器从客户端收集所有数据.使用数学集符号:

Server = Client1 ? Client2 ? ... ? ClientN 
Run Code Online (Sandbox Code Playgroud)

通常,任何记录对某个客户来说可能不是唯一的:

ClientX ? ClientY ? 0,  ? X,Y ? [1,N]
Run Code Online (Sandbox Code Playgroud)

以下是一些场景:

  • 客户创建记录.无法在客户端上设置记录的ID,因为它可能与存储在服务器上的记录冲突.因此,需要将新创建的记录提交到服务器 - >接收id - >在localStorage中创建记录.

  • 记录在服务器上更新,因此localStorage和服务器中的数据不同步.只有服务器知道,所以架构需要实现推送架构(?)

您是否会使用2个存储(一个用于localStorage,一个用于REST)并在它们之间同步,或者使用混合索引的DB2/REST适配器并在适配器中写入同步代码?

你能看到任何避免实现推送的方法(Web Sockets,...)?

rest data-synchronization ember.js ember-data

12
推荐指数
1
解决办法
2184
查看次数

Ember对象和Ember数据之间的差异

Ember Objects和Ember Data之间有什么区别?我知道当服务器上有一些数据时我应该使用Ember Data模型,但是我应该在何时何地使用它们?

ember.js ember-data

12
推荐指数
1
解决办法
1383
查看次数

如何用链接重新加载异步hasMany关系?

让我们说

Post = DS.Model.extend({
  comments: DS.hasMany({async: true})
})

Comment = DS.Model.extend({
  post: DS.belongsTo()
})
Run Code Online (Sandbox Code Playgroud)

并且我必须使用该links功能,否则由于对帖子的评论过多而导致414错误.

自此提交https://github.com/emberjs/data/commit/4d717bff53f8c93bedbe74e7965a4f439882e259

似乎不可能触发post.get('comments')的重新加载,即发送GET请求,例如post/42/comments.

那有什么解决方案吗?

javascript ember.js ember-data

12
推荐指数
2
解决办法
5650
查看次数

Ember数据:保存关系

我需要一次性将一个深层对象保存到服务器,并且无法在线找到任何使用最新ember数据(1.0.0-beta.4)的示例.

例如,使用这些模型:(jsfiddle)

App.Child = DS.Model.extend({
    name: DS.attr('string'),
    age: DS.attr('number'),
    toys: DS.hasMany('toy', {async:true, embedded:'always'}),
});
App.Toy = DS.Model.extend({
    name: DS.attr('string'),
    child: DS.belongsTo('child')
});
Run Code Online (Sandbox Code Playgroud)

这段代码:

actions: {
    save: function(){
        var store = this.get('store'),
            child, toy;

        child = store.createRecord('child', {
            name: 'Herbert'
        });
        toy = store.createRecord('toy', {
            name: 'Kazoo'
        });

        child.set('toys', [toy]);
        child.save();
    }
}  
Run Code Online (Sandbox Code Playgroud)

它只保存子对象的JSON,但不保存任何玩具 - 甚至没有侧载:

{
  child: {
    age: null
    name: "Herbert"
  }
}
Run Code Online (Sandbox Code Playgroud)

我是否还必须手动保存玩具?无论如何,我可以让它将以下JSON发送到服务器:

{
  child: {
    age: null
    name: "Herbert",
    toys: [{
        name: "Kazoo"
    }]
  } …
Run Code Online (Sandbox Code Playgroud)

json ember.js ember-data

12
推荐指数
2
解决办法
6114
查看次数