标签: ember-data

Ember数据和Ember StateManager

我有一个应用程序使用ember-data来持久化数据和StateManager来驱动它的全局状态.因为,加载数据是异步的,我想知道如何捕获表示所有数据都已加载的事件.确切地说,我有一个名为"loading"的状态,我在其中加载数据:

App.store.find(App.Model, ....)
Run Code Online (Sandbox Code Playgroud)

加载模型时,我会做一些后期处理.这是在名为"后处理"的"加载"子状态中完成的.当每个模型都有一个"didLoad"事件时,我转到"后处理":

App.Model = DS.Model.extend {
   didLoad: ->
     stateManager.send('postProcess',this)
}
Run Code Online (Sandbox Code Playgroud)

当加载和后处理每个数据时,应用程序应转换到与"加载"处于同一级别的另一个"编辑"状态:

      loading -> postprocessing
root /
     \
      editing
Run Code Online (Sandbox Code Playgroud)

我应该抓住哪些事件来实现转型?ember-data Store是否有回调功能?

ember.js ember-data

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

使用DS.RESTAdapter检查或内省Ember数据源的便捷方法

有没有一种方便的方法来检查从外部API传递到Ember js和Ember Data模型的原始模型数据?

类似Ruby .inspect方法的东西.对于Ember Data,有没有这样的调试工具?

我希望确保在数据到达我的Ember模型时正确映射到JSON.但是,在必须在Ember方面明确定义模型类中的属性之前,查看数据结构会很方便.

我想知道是否有类似于这种模式的东西:

App.Somedata = DS.Model.extend({
  raw: this.inspect
});
Run Code Online (Sandbox Code Playgroud)

然后在我的模板中,我可以将它作为传达整个结构的属性转储到视图中.

  {{#each item in controller}}
    {{item.raw}}
  {{/each}}
Run Code Online (Sandbox Code Playgroud)

这不是用于生产,而是仅用于尝试探索API的实现以及如何通过适配器提供API时的发现目的.

introspection ember.js ember-data

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

Ember Data 1.0.0:record.rollback()清除所有属性 - 我做错了什么?

见JSFiddle:http://jsfiddle.net/cyclomarc/HKHEJ/2/

我正在从Ember数据0.13转换为1.0.0 beta.在以前的版本中,您可以使用transaction.rollback()来还原模型中所做的任何更改(尚未保存).

在1.0.0中,您可以使用record.rollback().我遇到的问题是当时所有属性都被清除了......

 cancel: function () {
      var author = this.get('model');
      author.rollback();
    },  
Run Code Online (Sandbox Code Playgroud)

JSFiddle中的场景:单击名称,更改其中一个文本域中的文本,然后单击"还原更改".除id之外,所有字段都被清除.

这是一个已知的问题 ?

ember.js ember-data

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

ember数据在保存时注入元数据

我正在开发一个Ember.js应用程序,目前我尝试实现用户注册.到目前为止,我找到了两种方法来实现这一点,但两者都有一些缺点.

一种方法是使用注册控制器,该控制器使用电子邮件,密码和密码确认值对服务器执行自定义ajax发布.我真的不喜欢这个地方的自定义ajax调用,我更喜欢使用EmberData用户模型并保存它,但我不想在客户端存储密码和密码确认值.

我发现,有一种方法可以从服务器接收模型的元数据,所以我的问题是,还有一种方法可以将元数据保存到服务器吗?

其他解决方案,无需在客户端存储密码也是受欢迎的.

ember.js ember-data

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

Ember减少了对hasMany和belongsTo查找的请求

我有以下三种型号:

ConversationApp.Post = DS.Model.extend(
  body: DS.attr()
  replies: DS.hasMany('reply', async: true)
  author: DS.belongsTo('user', async: true)
  likedBy: DS.hasMany('user', async: true)
)

ConversationApp.Reply = DS.Model.extend(
  body: DS.attr()
  post: DS.belongsTo('post')
  author: DS.belongsTo('user', async: true)
  likedBy: DS.hasMany('user', async: true)
)

ConversationApp.User = DS.Model.extend(
  firstName: DS.attr()
  lastName: DS.attr()
)
Run Code Online (Sandbox Code Playgroud)

我的索引路由进行此调用:

ConversationApp.IndexRoute = Em.Route.extend(
  model: (args) ->
    @store.find('post', page: 1) # => /api/v1/posts?page=1
)
Run Code Online (Sandbox Code Playgroud)

在进行该呼叫之后,Ember开始获取第一页所需的所有用户 - 在第一页上共有17个(!)不同的用户请求(具有10个帖子).以下是Ember向服务器发出的3个请求示例:

  • / API/V1 /用户/ 11375
  • / API/V1 /用户/ 4383
  • / API/V1 /用户?IDS [] = 34588&IDS [] = 7442&IDS [] = 10294 …

handlebars.js ember.js ember-data

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

从ember数据json中删除模型名称

Ember数据将数据发送到嵌入了型号名称的服务器.

{
    "part" {
       "name" : "test1",
       "quantity" : 12
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从响应中删除"part"字段,所以它看起来像:

{
   "name" : "test1",
   "quantity" : 12
}
Run Code Online (Sandbox Code Playgroud)

我需要这是通用的,所以它适用于我的商店中的任何模型.


好的,我找到了RESTAdapter中的部分.

  serializeIntoHash: function(data, type, record, options) {
    var root = underscore(decamelize(type.typeKey));
    data[root] = this.serialize(record, options);
  },
Run Code Online (Sandbox Code Playgroud)

我试图删除根部分

serializeIntoHash: function(data, type, record, options) {
    data = this.serialize(record, options);
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它用{}响应

ember.js ember-data

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

EmberJS:无法读取未定义的属性'typeKey'

我想这个应该相当简单,但我还没有找到问题的根源,我还在学习Ember-Data.

我有两个模型,hasMany它们之间有关系:

App.User = DS.Model.extend({

  displayName: DS.attr('string'),
  email: DS.attr('string'),
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  location: DS.attr('string'),
  messages: DS.hasMany('message')

});

App.Message = DS.Model.extend({

  user: DS.belongsTo('user'),
  createdAt: DS.attr('date'),
  updatedAt: DS.attr('date'),
  fullText: DS.attr('string'),
  subject: DS.attr('string'),
  recipients: DS.attr('string')

});
Run Code Online (Sandbox Code Playgroud)

Ember-data从服务器检索用户,输出如下:

{  
   "user":[  
      {  
         "id":"3",
         "firstName":"A",
         "lastName":"User",
         "location":"",
         "email":"a@user.com",
         "displayName":"auser",
         "messages":[  
            {  
               "id":"3",
               "user":"3",
               "createdAt":"2014-08-06 20:08:38",
               "fullText":"Here is some text",
               "recipients":"",
               "subject":"Message subject (may not be needed)",
               "updatedAt":"2014-08-06 20:08:38"
            }
         ]
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

但是,当Ember尝试使用此响应填充商店时,我收到以下错误:

Error while loading route: TypeError: Cannot read property 'typeKey' …
Run Code Online (Sandbox Code Playgroud)

javascript has-many ember.js ember-data

4
推荐指数
2
解决办法
3946
查看次数

用Ember Data查找单身人士

有没有一种常规方法可以在Ember Data中查找单例?我已GameState根据这些说明(在"Singular"下)为我的模型设置了适配器:https://stackoverflow.com/a/23974804/173630

现在,当我获取GameState时,我希望能够这样做:

store.find('gameState');
Run Code Online (Sandbox Code Playgroud)

但是,它会findAll在Ember Data 中启动一个请求类型,它需要一个数组,而不是一个对象.

我的另一个选择是做这样的事情:

store.find('gameState', 'mine');
Run Code Online (Sandbox Code Playgroud)

mine参数被忽略,但这将成功获取并加载我的GameState.这里的缺点是Ember Data GameState在我的商店中创建了一个id为的额外实例mine.有什么方法可以防止这种情况吗?

我正在使用Ember Data 1.0.0-beta.11.

这是我的模型的样子:

var GameState = DS.Model.extend({
    currentPuzzle: DS.belongsTo('puzzle'),
    currentRound: DS.belongsTo('puzzleRound'),
    currentInventory: DS.attr('number'),
    moves: DS.hasMany('move', {async: true}),
    createdAt: DS.attr('date'),
    updatedAt: DS.attr('date')
});
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

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

Ember数据显示模板中hasMany关系的长度,而不下载该关系的所有对象

我的产品型号有很多价格.我有一个页面显示产品名称,代码,然后显示它的价格数量,即:

<tbody>
  {{#each model as |product id|}}
  <tr>
    <td>{{#link-to "product" product}}{{product.name}}{{/link-to}}</td>
    <td>{{product.code}}</td>
    <td>{{product.prices.length}}</td>
  </tr>
  {{/each}}
</tbody>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,使用product.price.lengthEmber数据会产生数千个按ID获取价格的请求.我不需要任何有关此页面上实际价格的信息.如果没有Ember数据下载所有价格,我怎么能在这里使用长度属性?

车型/ product.js:

export default DS.Model.extend({
  code: DS.attr('string'),
  name: DS.attr('string'),
  prices: DS.hasMany('price', {async: true})
});
Run Code Online (Sandbox Code Playgroud)

车型/ price.js

export default DS.Model.extend({
  product: DS.belongsTo('product', {async: true}),
  value: DS.attr('number'),
  minUnits: DS.attr('number'),
  maxUnits: DS.attr('number')
});
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

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

如何在另一个控制器ember中绑定Application controller属性

我在ApplicationController中有搜索属性,并且它与搜索的输入字段链接.我想在ProjectController中访问ApplicationController的搜索字段.它应该是同步的.我使用以下代码,但它不起作用.

/ app/controllers/projects/index.js(项目控制器)

import Ember from 'ember';
export default Ember.Controller.extend({
    needs: ['application'],
    searchBinding: 'controllers.application.search'
});
Run Code Online (Sandbox Code Playgroud)

/ app/controllers/application.js(应用程序控制器)

  import Ember from 'ember';
    export default Ember.Controller.extend({
      search: ''
    )}
Run Code Online (Sandbox Code Playgroud)

application.hbs

{{input value = search}}

ember.js ember-data ember-controllers ember-cli ember-components

4
推荐指数
2
解决办法
3730
查看次数