标签: ember-data

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
查看次数

Ember-Data递归hasMany关联

有没有人用ember-data建模数据树?

我会假设它会是这样的:

Node = DS.Model.extend({
    children: DS.hasMany(Node),
    parent:   DS.belongsTo(Node)
});
Run Code Online (Sandbox Code Playgroud)

然而,我无法得到这个工作,导致相信:或者我在如何设置它,或者2)目前无法使用ember建模树是完全错误的-数据.

我希望它是前者而不是后者......

当然它可能是JSON ......我假设JSON应该是这样的形式:

{
    nodes: [
        { id: 1, children_ids: [2,3], parent_id: null },
        { id: 2, children_ids: [], parent_id: 1 },
        { id: 3, children_ids: [], parent_id: 1 }
    ]
}
Run Code Online (Sandbox Code Playgroud)

任何有关此问题的提示/建议将不胜感激.

ember.js ember-data

11
推荐指数
1
解决办法
3366
查看次数

有人能指出我使用最新路由系统的ember.js项目吗?奖励积分如果它也使用余烬数据

我正在使用ember.js创建我的第一个项目,到目前为止还没有找到任何使用新路由系统的示例项目.来自ember文档的所有示例都使用旧路由.

另外,我很想看到一个使用Ember Data的项目示例,如果有人知道的话.

谢谢!

ember.js ember-data

11
推荐指数
1
解决办法
1283
查看次数

如何渲染hasMany关系数据?

如何在呈现URL /#/ persons/1时,获取以下示例代码,不仅可以呈现人员数据,还可以呈现该人员的电话号码.我试着通过电话号码循环,{{#each phoneNumber in phoneNumbers}}但我必须有一个基本的理解错误.

现在我只得到:

在此输入图像描述

app.js

App = Ember.Application.create({
  LOG_TRANSITIONS: true,
  rootElement: '#container'
});

// Router
App.Router.map(function() {
  this.resource('persons', function() {
    this.resource('person', { path: ':person_id' });
  });
  this.resource('phoneNumbers', function() {
    this.resource('phoneNumber', { path: ':phone_number_id' });
  });
});

App.PersonsRoute = Ember.Route.extend({
  model: function() {
    return App.Person.find();
  }
});

App.PhoneNumbersRoute = Ember.Route.extend({
  model: function() {
    return App.PhoneNumber.find();
  }
});

// Models
App.Store = DS.Store.extend({
  revision: 11,
  adapter: 'DS.FixtureAdapter'
});

App.Person = DS.Model.extend({
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  phoneNumbers: DS.hasMany('App.PhoneNumber') …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

11
推荐指数
1
解决办法
3993
查看次数

EmberJS:根据另一个属性重新加载控制器模型的最佳方法?

基于另一个属性为当前控制器重新加载模型的最佳方法是什么?

例如:我有一个帖子控制器.作者只能有一个帖子.如果currentAuthor属性发生更改,我想重新加载post创建表单.

我试过这样的方式:

App.PostEditController = Ember.ObjectController.extend
  modelReloadNeeded: Ember.observer((obj, keyName) ->
    postId = @get('currentAuthor').get('post_id')

    if postId?
      @set('model', @store.find('post', postId))
  , 'currentAuthor.post_id'
  )
Run Code Online (Sandbox Code Playgroud)

它重新加载所有东西,但不是真正的模型,而是承诺.而且它看起来不像是一个惯用的Ember解决方案.

也许有更好的方法来解决这个问题?

javascript ember.js ember-data

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

Ember-table与Ember-model/Ember-data集成

我试图将ember-models链接到ember-table以从服务器中提取分页记录,并在向下滚动时将它们添加到表中.

我可以通过在http://addepar.github.io/ember-table/上的ajax示例中请求我的api url来获取它的工作,但我无法弄清楚如何将它与ember-model集成以创建和ember对象,然后将它们添加到表中.

这是我的代码,只是发出ajax请求并添加到表.任何人都可以告诉我如何改变这个使用ember-model/ember-data代替.

App.TableAjaxExample = Ember.Namespace.create()

App.TableAjaxExample.LazyDataSource = Ember.ArrayProxy.extend

  createGithubEvent: (row, event) ->

    row.set 'id',       event.id
    row.set 'name',  event.name
    row.set 'isLoaded',   yes

  requestGithubEvent: (page) ->

    content = @get 'content'
    start   = (page - 1) * 30
    end     = start + 30
    per_page = 40
    # something like this ???
    #App.Detail.find(type: 'companies', page: page, per_page: per_page).on 'didLoad', ->
    url = "http:/myurl.dev/admin/details.json?type=companies&page=#{page}&per_page=30"
    Ember.$.getJSON url, (json) =>
      json.details.forEach (event, index) =>
        row = content[start + index]
        @createGithubEvent row, event
    [start...end].forEach …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data ember-table ember-model ember-1

11
推荐指数
1
解决办法
4026
查看次数