标签: ember-data

Ember-data fixtures适配器未加载所有数据

我有一个ember-data模型定义,如下所示:

Sylvius.Filter = DS.Model.extend({
  title: DS.attr('string'),
  slug: DS.attr('string'),
  // Belongs to Atlas
  atlas: DS.belongsTo('Sylvius.Atlas'),
  // Has images
  images: DS.hasMany('Sylvius.Image'),
  // May have AtlasExtras
  extras: DS.hasMany('Sylvius.AtlasExtra'),
  // Structures for this filter
  structures: DS.hasMany('Sylvius.Structure'),
  // This is the path to the thumbnails sprite.
  // Each image will have an index on this sprite
  thumbnailUrl: DS.attr('string'),
  // How big is each thumbnail?
  thumbnailHeight: DS.attr('number'),
  thumbnailWidth: DS.attr('number'),
  // How big are the images? 
  imageHeight: DS.attr('number'),
  // which image is selected?
  selectedImage: DS.belongsTo('Sylvius.Image') …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

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

Ember.js current_user - 从控制器访问全局变量

我对一个看似简单的余烬问题感到困惑.我正在使用active_model_serializers元数据序列化从rails控制器序列化我的rails current_user方法,然后使用这个人的临时解决方案提取并将current_user meta json设置为全局ember变量.

App.CustomRESTSerializer = DS.RESTSerializer.extend({
  extractMeta: function(loader, type, json) {
    var meta;
    meta = json[this.configOption(type, 'meta')];
    if (!meta) { return; }
    Ember.set('App.metaData', meta);
    this._super(loader, type, json);
  }
});
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到这一点.现在,我可以通过键入App.metaData.current_user以及通过调用特定属性从句柄访问控制台中的current_user信息,即:

{{App.metaData.current_user.email}}
Run Code Online (Sandbox Code Playgroud)

并且该电子邮件属性显示在模板中.当我尝试从ember控制器中访问该全局变量时,问题就出现了.这看起来非常简单,但我似乎无法从任何ember控制器中访问current_user.我试过了:

currentUserBinding: 'App.metaData.current_user',

currentUser: function() {
  return App.metaData.current_user;
}.property(),

Ember.get('App.metaData.current_user')
Run Code Online (Sandbox Code Playgroud)

和其他一些方法,但似乎无法访问它.奇怪的是,我可以通过直接路径从控制台和把手内轻松访问current_user,但不能从ember控制器中访问.我一定错过了一些明显的东西.

非常感谢任何帮助!

ember.js ember-data active-model-serializers

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

Ember Data 1.0.0:belongsTo关系的预期格式是什么

我有以下型号:

App.Publication = DS.Model.extend({
  title: DS.attr('string'),
  bodytext: DS.attr('string'),
  author: DS.belongsTo('author')
});

App.Author = DS.Model.extend({
  name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)

以下是json数据:

{
  "publications": [
  {
    id: '1',
    title: 'first title',
    bodytext: 'first body',
    author_id: 100
  },
  {
    id: '2',
    title: 'second title',
    bodytext: 'second post',
    author_id: 200
  }
];
}
Run Code Online (Sandbox Code Playgroud)

在Ember Data RC12中,这有效(您可以在json中指定author_id或作者,并且出版物将始终链接正确的作者).

在Ember Data 1.0.0中,这不再有效; 作者总是空的.

在一些文档中,我发现 - 因为我在json数据中使用"author_id"(而不仅仅是作者) - 我需要在模型中指定键; 从而:

 author: DS.belongsTo('author', { key: 'author_id' })
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用; 该出版物中的作者仍为空.

我现在看到的唯一解决方案是实现自定义序列化程序并将author_id覆盖为author(通过normailzeId); 我无法改变我的后端数据结构...因此:

App.MySerializer = DS.RESTSerializer.extend({
  //Custom serializer used for all models
  normalizeId: …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

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

Ember数据别名模型/ Map JSON响应

我的服务器返回一个JSON响应,如下所示:

{
  artists: [{
    id: "1",
    first_name: "Foo",
    last_name: "Bar"
}],
  studios: [{
    id: 1,
    name: "Test",
    // ...
    artist_ids: ["1"]
  }]
}
Run Code Online (Sandbox Code Playgroud)

"艺术家"实际上是一个用户模型,但名称不同.如何将艺术家映射到用户模型?也许是一个糟糕的解释,但如果我将JSON响应服务器重命名为"用户"而不是"艺术家",并使用下面的模型,一切都像我想要的那样.我只想在服务器端和客户端使用名称"artist"而不是"user".希望你们明白我的意思.

App.Studio = DS.Model.extend
  name:  DS.attr 'string'
  // ..
  users: DS.hasMany 'App.User'

App.User = DS.Model.extend
  firstName:  DS.attr 'string'
  lastName:  DS.attr 'string'
  studio: DS.belongsTo 'App.Studio'
Run Code Online (Sandbox Code Playgroud)

我想最简单的事情就是艺术家:DS.hasMany'App.User',但显然这不起作用.

ember.js ember-data

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

使用ember-data标准化嵌入的记录

我正在尝试规范化REST API中的数据.我不会改变JSON响应.

我如何通常使用此JSON响应来提取嵌入式记录,使其处于侧载格式.

服务器的响应如下所示:

{
  "objects": [
    {
      "active": true, 
      "admin": true, 
      "created_at": "2013-11-21T15:12:37.894390", 
      "email": "me@example.com", 
      "first_name": "Joe", 
      "id": 1, 
      "last_name": "Joeson", 
      "projects": [
        {
          "created_at": "2013-11-21T15:13:13.150572", 
          "id": 1, 
          "name": "Super awesome project", 
          "updated_at": "2013-11-21T15:13:13.150606", 
          "user_id": 1
        }
      ], 
      "updated_at": "2013-12-06T19:50:17.035881"
    }, 
    {
      "active": true, 
      "admin": false, 
      "created_at": "2013-11-21T17:53:17.155700", 
      "email": "craig@example.com", 
      "first_name": "Craig", 
      "id": 2, 
      "last_name": "Craigson", 
      "projects": [
        {
          "created_at": "2013-11-21T17:54:05.527790", 
          "id": 2, 
          "name": "Craig's project", 
          "updated_at": "2013-11-21T17:54:05.527808", 
          "user_id": 2
        }, 
        {
          "created_at": "2013-11-21T17:54:29.557801", 
          "id": 3, 
          "name": "Future …
Run Code Online (Sandbox Code Playgroud)

javascript ember.js ember-data

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

在RESTAdapter初始化之后添加标头

我正在尝试Authorization在初始化和使用适配器后向我的适配器请求添加标头.我可以在创建my时以静态方式添加标题ApplicationAdapter,但我似乎无法在后续REST调用中使用标题.我在尝试这个:

var auth= "Basic " + hash;
App.ApplicationAdapter.reopen({
    headers: {
        Authorization: auth
    }
});
Run Code Online (Sandbox Code Playgroud)

我已经RESTAdapterajax方法中进行了调试,并且测试adapter.headers始终是undefined.

ember.js ember-data

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

从计算财产中归还承诺

我意识到有几个类似的问题,但这些答案似乎都没有解决我的问题.我的目标是获取一个列表language,并过滤它们,以便我的模板可以显示完整列表的子集.

我开始验证我的计算属性是否正常工作:

MyController.js

// Works as expected
languagesFiltered: function() {
   return this.get('languages');
}.property('languages')
Run Code Online (Sandbox Code Playgroud)

然后我添加了一个过滤功能,但这里遇到了麻烦:

MyController.js

languagesFiltered: function() {
   // console.log shows that languages is actually a promise
   var languages = this.get('languages');

   // all of this returns a promise, but Handlebars can't handle the promise
   return languages.then( function( languagesArray ) {
      return languagesArray.filter( function( item, index, enumerable) { 
         return item.get('name') !== 'English';
      });
   })
}.property('languages')
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用该Ember.Array.filter方法(http://emberjs.com/api/classes/Ember.ArrayProxy.html#method_filter).过滤器似乎工作正常,但现在languagesFiltered返回一个promise,Handlebars无法处理.

我尝试了最后一种选择:

MyController.js

languagesFiltered: function() {
     var languages …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

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

有没有办法使用emberfire指定模型上的timestamp属性应该赋予Firebase.ServerValue.TIMESTAMP值?

我有一个带有timestamp属性的模型.当在服务器上创建记录时,我希望服务器而不是提供值的客户端使用值初始化此属性的值,以便这些时间戳在不同客户端之间保持一致.

如果我直接使用firebase API,那么我理解我可以使用特殊令牌Firebase.ServerValue.TIMESTAMP来实现这一点.但我无法弄清楚如何使用ember-data和emberfire适配器来做到这一点.

ember.js ember-data emberfire

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

Ember.MODEL_FACTORY_INJECTIONS究竟做了什么?

我使用的灰烬CLI默认情况下它似乎设置Ember.MODEL_FACTORY_INJECTIONS = true;app.js.

我尝试将此行注释掉(并将其设置为false)然后我的应用程序似乎表现出某种严格的模式.我得到了一堆失败的断言,因为我的一些模型关系没有明确指定.

这是确切的错误:

You defined the 'account' relationship on (subclass of DS.Model), but multiple possible inverse relationships of type (subclass of DS.Model) were found on (subclass of DS.Model). Look at http://emberjs.com/guides/models/defining-models/#toc_explicit-inverses for how to explicitly specify inverses

使用默认的Ember CLI生成的应用程序Ember.MODEL_FACTORY_INJECTIONS = true;,我没有收到这些错误.所以我会相信这个标志会以某种方式改变核心行为.

洞察力!

ember.js ember-data ember-cli

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

你如何在实践中使用findAll和peekAll在Ember?

EmberJS文档中,我得到以下两种方法来检索给定类型的所有记录,一个是发出请求而另一个不是.

var posts = this.store.findAll('post'); // => GET /posts

var posts = this.store.peekAll('post'); // => no network request

在我看来,我总是需要先做一个,findAll但我不明白我应该什么时候做peekAll.

例如,用户进入我的博客然后我得到所有的帖子使用findAll,然后在同一流程中的某些点我需要所有这些帖子,所以我应该使用a peekAll来节省带宽.所以我怎么知道我以前要求所有的posts?我应该保存一些全球状态来处理吗?我会假设第一次客户端请求a peekAll如果没有任何记录它会自动执行findAll或者我应该手动但它可能会引入一些样板.

如何在实践中运用findAllpeekAll或者等价物单记录?有什么建议?

ember.js ember-data

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