标签: ember-data

Ember-data和MongoDB,如何处理_id

我正在使用带有rails和MongoDB的ember-data,并且对于在MongoDB中存储ID的方式存在问题 - 在_id字段中.

Ember-data将使用id作为ID的默认字段,所以我试图像这样覆盖它:

App.User = DS.Model.extend
    primaryKey: "_id"
    name: DS.attr "string"
    image: DS.attr "string"
Run Code Online (Sandbox Code Playgroud)

这似乎在大部分时间都有效,但在某些情况下,我从ember说得到例外:

未捕获错误:断言失败:您的服务器返回带有密钥_id的哈希,但您没有映射

我怀疑这可能是ember-data中的一个错误,因为它仍处于开发阶段,但是我试图找到一种方法来将_id映射到服务器端的id中?我正在使用mongoid来进行mongo映射.

ruby-on-rails mongodb mongoid ember.js ember-data

9
推荐指数
2
解决办法
4154
查看次数

使用ember-data find()和多个参数返回单个记录

我试图在其他参数上进行查找(使用余烬数据)而不是id,实际上是两个参数.

但我回来的是:

"Uncaught Error: assertion failed: Your server returned a hash with the key customer but you have no mappings".
Run Code Online (Sandbox Code Playgroud)

在代码中挖掘之后,我看到find方法在给定哈希时委托给findQuery方法,这会创建一个DS.AdapterPopulatedRecordArray,但我只在我的json中返回一个客户对象:

{"customer":{
"id":24857,"name":"Kim Fransman","id_number":"XXXX","email":"email@domain.com","type":"Person"}}
Run Code Online (Sandbox Code Playgroud)

我可以通过将json包装在customers数组中并在我的Handlebars视图中循环遍历来解决这个问题,但这感觉非常错误.

今天有没有办法用ember-data做到这一点?

ember.js ember-data

9
推荐指数
1
解决办法
2609
查看次数

在测试中重置embture-data FixtureAdapter存储/模型

我们的应用程序使用FixtureAdapter的ember-data.我们正在使用Jasmine和js-test-driver测试模型代码(各种JS计算).每个块都在beforeEach块中创建自己的记录集.

这适用于2013-03-05(rev 7575f5a)本地构建的ember-1.0.0-rc.1和ember-data.我目前正在尝试升级到1.0.0-rc.3和最新的余烬数据,但我遇到了一个具有独特ID的障碍.运行所有测试时出现以下错误:

Error: assertion failed: The id 1001 has already been used with another record of type .Foo. in http://localhost:56390/js/lib/ember-1.0.0-rc.3.js (line 52)
Run Code Online (Sandbox Code Playgroud)

它看起来像是一个较新版本的独特ID上的ember-data断言.不幸的是,我们的测试需要硬编码的id用于在每个测试的beforeEach块中重新创建的记录.所以每个测试都创建一个ID为1001的Foo.

是否有一种简单的方法可以使用FixtureAdapter重置所有数据(因此忘记Foo 1001)?我尝试用以下方法重置灯具:

App.Foo.FIXTURES = []
Run Code Online (Sandbox Code Playgroud)

然而,ember-data似乎仍然在某处跟踪旧记录.我也尝试过App.reset(),但它似乎没有重置商店.

我们也这样做

App.Store = DS.Store.extend({
    revision: 12,
    adapter: 'DS.FixtureAdapter'
});
Run Code Online (Sandbox Code Playgroud)

在beforeEach块中假设通过创建新商店来清除所有数据,但这也不起作用.

ember.js ember-data

9
推荐指数
1
解决办法
661
查看次数

如何(De)使用Jackson基于注释从对象序列化字段?

我需要以特定方式配置Jackson,我将在下面介绍.

要求

  1. 带注释的字段仅使用其ID进行序列化:
    • 如果该字段是普通对象,则序列化它 id
    • 如果该字段是对象的集合,则序列化一个数组 id
  2. 带注释的字段以不同方式序列化其属性名称:
    • 如果该字段是普通对象,请将"_id"后缀添加到属性名称
    • 如果该字段是对象的集合,请将"_ids"后缀添加到属性名称
  3. 对于注释,我想这样的自定义@JsonId,最好有一个可选的值来覆盖名字就像@JsonProperty
  4. id属性应由用户定义,使用:
    • 已经存在的杰克逊 @JsonIdentityInfo
    • 或者通过创建另一个类或字段注释
    • 或者通过决定检查id属性可发现性的注释(例如,对JPA场景有用)
  5. 应使用包装的根值序列化对象
  6. Camel case命名应该用下划线转换为小写
  7. 所有这些都应该是可反序列化的(通过构造一个只设置了id的实例)

一个例子

考虑到这些POJO:

//Inform Jackson which property is the id
@JsonIdentityInfo(
    generator = ObjectIdGenerators.PropertyGenerator.class,
    property = "id"
)
public abstract class BaseResource{
    protected Long id;

    //getters and setters
}

public class Resource extends BaseResource{
    private String name;
    @JsonId
    private SubResource subResource;
    @JsonId
    private List<SubResource> subResources;

    //getters and setters
}

public class …
Run Code Online (Sandbox Code Playgroud)

java json jackson ember.js ember-data

9
推荐指数
1
解决办法
6870
查看次数

Ember-data延迟加载与"链接"属性的关联

我有一个模范老师,有很多学生.模型定义如下:

App.Teacher = DS.Model.extend({
  email: DS.attr('string'),
  students: DS.hasMany('student')
});

App.Student = DS.Model.extend({
  teacher: DS.belongsTo('teacher'),
});
Run Code Online (Sandbox Code Playgroud)

当教师登录时,服务器返回教师的JSON表示:

{
  id: 1,
  email: "abc@example.com",
  links: {
    students: /teacher/1/students
  }
}
Run Code Online (Sandbox Code Playgroud)

在登录控制器中,然后我将这些数据推送到商店并将其存储在Session控制器的属性中:

this.set('currentUser', this.get('store').push('teacher', teacherJson))
Run Code Online (Sandbox Code Playgroud)

我想延迟加载students关联,所以我使用了API中定义的"链接"格式(http://emberjs.com/api/data/classes/DS.Store.html#method_push).所以,理想情况下,每当我打电话

App.SessionController.get('currentUser').get('students')
Run Code Online (Sandbox Code Playgroud)

它会students通过发送GET请求来加载关联的/teacher/1/students.但这从未发生过.为什么没有触发请求?

ember.js ember-data

9
推荐指数
1
解决办法
4252
查看次数

Ember Data对删除记录的期望是什么?

我正在使用带有rails后端的RESTful适配器的Ember Data.

当我从灰烬中删除记录record.deleteRecord(); record.save()DELETE请求转到服务器和模型将被删除,但这个错误打印到JavaScript控制台:

Extract requested, but no data given for App.ThisModel. This may cause weird problems.
Run Code Online (Sandbox Code Playgroud)

来自服务器的响应是render json: true,所以我将其更改为render json: deleted_model渲染已删除记录的json.

这摆脱了以前的错误,但现在删除的记录在Ember中重新创建.

Ember在回复中期望什么?

ruby-on-rails ember.js ember-data

9
推荐指数
2
解决办法
3131
查看次数

如何在ember-cli应用程序中设置api-stub?

我正在使用ember-cli设置一个基本应用程序,并且使用带有ember-data的api-stub遇到了麻烦.我引用了api-stub README并引用了ember指南,但无法弄清楚我缺少什么.我有点像菜鸟,所以请原谅我的任何明显的疏忽.

这是我的设置......

/api-stub/routes.js

server.get('/listings', function(req, res) {
  var listing = {
    "listing": [{
      "id": 1,
      "title": "Sunny 1-bedroom",
      "unit_type": "1br / 1ba",
      "description": "Roomy 1-bedroom apartment in pre-war walkup. Gets great morning light from the south."
    },
    {
      "id": 2,
      "title": "Large 2-bedroom",
      "unit_type": "2br / 1.5ba",
      "description": "Roomy 2-bedroom apartment in pre-war walkup. Gets great morning light from the south."
    }]
  };

  res.send(listing);
});
Run Code Online (Sandbox Code Playgroud)

/app/adapters/application.js

var ApplicationAdapter = DS.RESTAdapter.extend({
    namespace: 'api'
});

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

/package.json

{
  ... …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

9
推荐指数
2
解决办法
5264
查看次数

Ember-data根据id和其他参数查找记录?

在Ember文档中,我发现find()支持通过id查找:

this.store.find('post', 1); // => GET /posts/1
Run Code Online (Sandbox Code Playgroud)

并且还通过传递任意参数:

this.store.find('post', { name: "Peter" }); // => GET to /posts?name='Peter'
Run Code Online (Sandbox Code Playgroud)

但在我的情况下,我必须通过id找到,并传递一个额外的参数来请求所有字段包含在响应中(默认情况下会省略一些),如下所示:

this.store.find('post', 1); // => GET /posts/1?include=all
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

this.get('store').find('post', params.post_id, { include : 'all' });
Run Code Online (Sandbox Code Playgroud)

但我的参数被忽略了.

这似乎是一个相当基本的用例,所以我必须遗漏一些东西......

我怎么能做到这一点?

javascript ember.js ember-data

9
推荐指数
1
解决办法
6479
查看次数

如何从ember-CLI告诉ember.js和ember-data版本?

ember -v只显示ember cli版本.

如何查看ember.js版本和ember数据版本?

ember.js ember-data ember-cli

9
推荐指数
1
解决办法
6095
查看次数

Ember Data不允许hasMany关系中的重复条目

我有以下型号:

#order/model.coffee
Order = DS.Model.extend {
  line_items: DS.hasMany 'product', {async: true}
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,我想将一些产品添加到订单中.我发现我只能添加一次产品,再添加相同的产品不起作用:

#product/route.coffee
...
actions:
    # Not actually my code but illustrates the problem
    addToCart: (product1, product2)->
      order = @modelFor 'order'
      console.log order.get('line_items.length') # prints 0

      order.get('line_items').pushObject product1
      console.log order.get('line_items.length') # prints 1

      order.get('line_items').pushObject product2
      console.log order.get('line_items.length') # prints 2

      order.get('line_items').pushObject product1
      console.log order.get('line_items.length') # prints 2

      order.get('line_items').pushObject product2
      console.log order.get('line_items.length') # prints 2


      ...
Run Code Online (Sandbox Code Playgroud)

问题是用户可能不止一次需要单个项目.表示该方法的最简单方法是使数组具有重复条目.看来Ember并没有让我为关系这样做.如何在关系中多次添加模型?

javascript ember.js ember-data

9
推荐指数
1
解决办法
494
查看次数