标签: ember-data

使用Ember和Ember数据:如何在存储加载完成后和/或关联视图完成重新渲染时设置回调?

我正在使用Ember和Ember数据从REST API加载几百个对象,使用自定义适配器中的findAll调用.我有一个引用findAll的ArrayController.content,然后使用最近添加的Ember.Select在select小部件/下拉菜单中显示对象.一旦完全呈现所有对象(每个对象都是select的选项),我需要在select小部件上运行一个函数 - 特别是Chosen.js库.

因为处理select中的几百个对象需要一些时间(2-4秒),所以在事件Ember.Select.didInsertElement和Ember.ArrayController.contentDidChange上使用回调不太有用; 他们都很快开火.那么是否可以使用另一种事件或另一种方法呢?

ember.js ember-data

5
推荐指数
1
解决办法
2342
查看次数

使用ember.js显示JSON而不是用于rails视图的HTML

我正在慢慢地将我的rails网站从传统的rails往返每个视图应用程序转移到最终将基于单页ember.js的应用程序.作为此迁移的一部分,我是按步骤进行操作,而不是一次性将整个应用程序迁移到单个页面应用程序,而是逐个部分.

我对一个似乎很普遍的问题感到难过.当我为JSON视图和HTML视图使用相同的控制器时,在Chrome中按回来偶尔会向我显示JSON视图而不是HTML视图.

例如,我有一个端点/组合/ 13,它是这些部分ember.js应用程序之一的入口点,它导致Ember数据在同一端点上使用应用程序/提取ID为#13的投资组合的JSON json作为Accept:标题.在向前导航到更深的页面后按回来将获得页面的JSON表示而不是HTML.

我是否需要强制Ember Data使用format参数,以使JSON版本位于不同的URL?如果是这样,那怎么做呢?

我究竟做错了什么?

ruby-on-rails ember.js ember-data

5
推荐指数
1
解决办法
803
查看次数

应该在模型或控制器中声明计算属性吗?

拥有以下用户模型:

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

应该在哪里声明'fullName'计算属性?

  fullName: Ember.computed(->
    firstName = @get("firstName")
    lastName = @get("lastName")
    firstName = ""  if firstName is `undefined`
    lastName = ""  if lastName is `undefined`
    lastName + " " + firstName
  ).property("firstName", "lastName")
Run Code Online (Sandbox Code Playgroud)

它应该在'UsersController'中还是直接在模型中?Ember文档说只在会话中使用的字段应该写在控制器中.但问题是我无法访问索引模板中的'fullName':

Sks.IndexController = Ember.Controller.extend
  needs: ['users']
Run Code Online (Sandbox Code Playgroud)

在这里,'fullName'无法访问(在控制器中声明)

{{#each user in controllers.users}}
  <li>{{user.fullName}}</li>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

但它是在模型中的时候.

ember.js ember-data

5
推荐指数
1
解决办法
2578
查看次数

如何使用ember数据处理服务器响应错误

  1. 什么是服务器的ember-data当前默认预期响应,如果它有200以外的东西,那么它不会抛出未捕获的异常,而是解析错误以供以后使用?

    例如{"errors":{jsonerror}} ???

  2. 我应该如何处理Ember中的服务器错误响应(json格式)?

谢谢!

ember.js ember-data

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

由hasMany关系定义的Ember children突然变为嵌入式模型

我定义了以下模型:

App.Post = DS.Model.extend({
  title: DS.attr('string'),
  comments: DS.hasMany('comment')
});

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

如果我使用Comment创建一个Post条目,那么存储在我的浏览器本地存储中的JSON会引用注释作为ID数组,它可以很好地工作:

...
"o3duh":{
    "id":"o3duh",
    "title":"How to write Ember",
    "comments":[
        "jf0a2"
    ]
}
...
Run Code Online (Sandbox Code Playgroud)

但是,当我添加另一个帖子时,JSON突然改变,以便嵌入评论:

...
"o3duh":{
    "id":"o3duh",
    "title":"How to write Ember",
    "comments":[
        {
            "message":"First!"
        }
    ]
},
"6kudl":{
    "id":"6kudl",
    "title":"Learning Ember is painful",
    "comments":[
    ]
}
...
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我能预防吗?这引起了我的问题,因为一旦它变成这种嵌入格式,重新加载页面时LSAdapter就无法读取数据.

这是一个JSBin,所以你可以看到它发生在自己身上并看到完整的JSON等.要重现问题,只需创建一个帖子并添加注释,然后你可以刷新页面没有问题.然后添加另一篇文章并尝试刷新页面.

我不确定问题是否与ember-data或localstorage适配器有关.

local-storage ember.js ember-data

5
推荐指数
1
解决办法
586
查看次数

Ember.js:如何从App对象访问商店

从Ember.Data 1.0 Beta开始,我们必须使用store.find('model')而不是App.Model.find().如何访问App对象中的商店对象?

var App = Ember.Application.create({
  auth: function() {
    return new Ember.RSVP.Promise(function(resolve, reject) {
      // ... get token somehow ...
      // how to get store?
      this.store.find('user').then(function(users) {
        App.set('user', users.get('firstObject');
        resolve();
      }, function(err) {
        reject();  
      });
    });
  }
});

App.deferReadiness();
App.auth().then(App.advanceReadiness());
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

5
推荐指数
2
解决办法
2833
查看次数

Ember.js有很多复选框列表

我有以下两种型号:

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

和:

App.Activity = DS.Model.extend({
    children: DS.hasMany('child',{async:true}),
    name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)

我想使用复选框在hasMany关系中在现有子节点之间进行选择.

例如,我有这三个孩子:

App.Child.FIXTURES = [
  { id: 1, name: 'Brian' },
  { id: 2, name: 'Michael' },
  { id: 3, name: 'James' }
];
Run Code Online (Sandbox Code Playgroud)

用户应该能够在创建或编辑活动时使用复选框,以选择要添加到hasMany关系的子项.

我创建了一个JSFiddle来说明我的问题:http://jsfiddle.net/Dd6Wh/.点击"创建新活动"以查看我正在尝试执行的操作.

基本上它与Ember.Select [...] multiple ="true"相同,但是对于复选框.

对于像Ember.js这样的事情,正确的方法是什么?

javascript ember.js ember-data

5
推荐指数
1
解决办法
2541
查看次数

Ember Model Object hasMany不会像我期望的那样返回数组

我正在尝试使用Ember Data的hasMany字段来返回一个数组,并将数组中的项计数作为计算属性.但是,当我执行以下操作时,它会返回一个对象(由于{async:true}似乎是一个promise)?而不是我期望的数组.

App.Shift = DS.Model.extend({
  name: DS.attr('string'),
  people: DS.hasMany('person', {async: true});
  number_of_people: (function(){
    this.get('people').length
  }).property('people')
)};

App.Person = DS.Model.extend({
  first_name: DS.attr('string'),
  last_name: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)

更新:我想回报人的长度.我试过这个但是当我访问该属性时,我得到了仍然返回的promise对象,而不是当时返回的完成promise的值.如何获得承诺返回的评估值?

number_of_people: (function(){
  return this.get('people').then(function(people){
    return people.get('length');
  });
})
Run Code Online (Sandbox Code Playgroud)

javascript arrays ember.js ember-data

5
推荐指数
1
解决办法
2107
查看次数

Ember数据:model.get('modelName')未定义,但model._internalModel有效

我正在使用Ember Data 2.2.0和Ember 2.2.1.从数据存储中检索模型后,我想将模型的类型名称作为字符串.

根据API Docs,DS.Model定义了一个modelName 属性,它看起来像我想要的.但是,在从商店中检索后,我发现model.modelName并且model.get('modelName')未定义.modelfindRecord

另一方面model._internalModel.modelName,按预期返回模型的小写,虚线化名称.

这里发生了什么?

model ember.js ember-data

5
推荐指数
1
解决办法
4572
查看次数

我们如何使用ember-cli对Model Mixin进行单元测试

Ember.Mixin我的应用程序中包含DS.attr()和/或包含的内容很少DS.belongsTo().我想知道我应该如何对它们进行单元测试?

默认情况下,ember-cli会生成此测试

test('it works', function(assert) {
  var MyModelObject = Ember.Object.extend(MyModelMixin);
  var subject = MyModelObject.create();
  assert.ok(subject);
});
Run Code Online (Sandbox Code Playgroud)

但当我尝试与DS.attr()我交互时,我收到以下错误:

TypeError: Cannot read property '_attributes' of undefined
  at hasValue (http://localhost:4200/assets/vendor.js:90650:25)
  at Class.get (http://localhost:4200/assets/vendor.js:90730:13)
  at Descriptor.ComputedPropertyPrototype.get (http://localhost:4200/assets/vendor.js:29706:28)
  at Object.get (http://localhost:4200/assets/vendor.js:35358:19)
  at Class.get (http://localhost:4200/assets/vendor.js:49734:38)
  at Object.<anonymous> (http://localhost:4200/assets/tests.js:20126:25)
  at runTest (http://localhost:4200/assets/test-support.js:2779:28)
  at Object.run (http://localhost:4200/assets/test-support.js:2764:4)
  at http://localhost:4200/assets/test-support.js:2906:11
  at process (http://localhost:4200/assets/test-support.js:2565:24)
Run Code Online (Sandbox Code Playgroud)

这让人感觉到了.最好的方法是什么?我应该DS.Model在测试中创建一个然后应用mixin吗?

谢谢 !

javascript unit-testing ember.js ember-data ember-cli

5
推荐指数
1
解决办法
1045
查看次数