标签: ember-data

如何撤消对模型的更改?

是否可以将模型恢复到干净状态?我的意思是撤消对其属性的所有更改并将状态标记为干净?

ember.js ember-data

3
推荐指数
1
解决办法
2203
查看次数

3
推荐指数
1
解决办法
1655
查看次数

Ember Data的单向关系?

我需要找到一种在Ember Data中建立单向关系的方法.到目前为止,我只把关系放在一个模型中,而且效果很好.问题是当模型B被删除时,模型A变脏了,即使模型A完全没有模型B的概念.我怎样才能让模型B指向模型A,并使其完全忽略关系?我不介意声明A类中的关系有正确的反转,我只是不希望类型A的模型在关系发生变化时变脏.

另外,仅供参考,我使用的是相当旧的Ember版本.我从8月26日开始使用Ember.js RC7和Ember Data.在你问之前,不,我不升级.

ember.js ember-data

3
推荐指数
1
解决办法
1274
查看次数

Emberjs使用sortProperties按日期对内容进行排序

我试图使用Emberjs sortProperties在这个jsfiddle中按日期对内容进行排序.我的模型有一个startTime属性,我试图排序,但它没有工作.然后我在控制器中创建了一个名为todayEvent的计算属性,该属性返回与传入日期匹配的事件,我尝试对其进行排序,但它也无效.我所要做的就是列出在同一天发生的事件,但是以chich事件中发生的一天中的时间按照升序排序,例如,在早上10点之前发生的事件 应该在下午12点之前列出.

这是jsfiddle

该模型:

App.TimeSlot = DS.Model.extend( {
  startTime: DS.attr('date'),
  endTime: DS.attr('date'),
  allDay: DS.attr('boolean'),
  soldOut: DS.attr('boolean')
});
Run Code Online (Sandbox Code Playgroud)

控制器

App.TimeSlotController = Ember.ArrayController.extend({
 content: [ ],

 sortProperties: ['todayEvent'],
 sortAscending: true,

 day: Ember.A(['2013-10-25']),

 todayEvent: function(){
  self = this;
  u = self.get('content'); 
  console.log('u', u);
  kl =  u.filter(function(availableSlot) {
   console.log ('a', availableSlot.get('startTime') );

 return (moment(availableSlot.get('startTime')).format("YYYY-MM-DD") ==  self.get('day').toString() );
  }); 

   return kl;  
 }.property('day', 'content@each'),


});
Run Code Online (Sandbox Code Playgroud)

fixtureAdapter

App.TimeSlot.FIXTURES = [

  {
    id: 3,
    startTime: …
Run Code Online (Sandbox Code Playgroud)

javascript ember.js ember-data

3
推荐指数
1
解决办法
4124
查看次数

Ember Data没有在save()上序列化记录ID,导致PUT没有id?

我有一条创建新记录的路线,如下所示:

App.ServicesNewRoute = Ember.Route.extend({
    model : function() {
        return this.store.createRecord('service');
    },

    setupController: function(controller, model) {
        controller.set('model', model);
    },

});
Run Code Online (Sandbox Code Playgroud)

然后我将该模型的属性绑定到路径的模板,使用{{input type="text" value=model.serviceId ... }}它很好,模型在填充表单时填充.

然后我保存记录:

App.ServicesNewController = Ember.ObjectController.extend({
    actions : {
        saveService : function() {
            this.get('model').save(); // => POST to '/services'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

哪个也有效.

然后我再次单击保存按钮,现在save方法按预期执行PUT,因为模型有一个id设置(id:102):

在此输入图像描述

但是当我在Dev Tools中查看PUT请求时,我发现id属性未被序列化:

在此输入图像描述

结果,在后端创建了一个新实例,而不是更新现有实例.

请忽略serviceId属性,它只是一个string与记录ID无关的常规属性,应该只是命名id.

我不知道为什么id没有被序列化...我不能在模型上定义一个id属性,因为Ember Data不允许它,它是隐含的.所以我不知道我错过了什么......

任何帮助是极大的赞赏!

javascript ember.js ember-data

3
推荐指数
1
解决办法
4938
查看次数

在Ember和Ember Data中检查相关对象为空

当相关数据以0-1关系序列化时,一切正常.

"lesson": {
  "id": 1,
  "title": "foo",
  "user_completion": {
    "id": 1,
    "percent": 30
  },
  "is_available": true
}
Run Code Online (Sandbox Code Playgroud)

但是,当尚未创建相关模型时,Web服务将为该关系返回null.

"lesson": {
  "id": 1,
  "title": "foo",
  "user_completion": null,
  "is_available": false
}
Run Code Online (Sandbox Code Playgroud)

看来,当使用此数据实例化ember模型时,user_completion将成为PromiseObject.

  1. 当没有相关的一对一或一个记录存在时,我的Web服务是否应该为此关系返回null?
  2. Ember Data是否已将promise对象放在模型的此属性上,即使它永远无法解析为什么?我错过了重要的事吗?
  3. 在需要检查相关数据是否存在的情况下,我应该怎么做,如下例所示?

    model.filter(function(item) {
      return item.get('is_available') || item.get('user_completion') !== null;
    });
    
    Run Code Online (Sandbox Code Playgroud)

    我真的只需要检查user_completion是否是PromiseObject?这看起来有点奇怪,我觉得我在其他地方犯了一个错误.

javascript ember.js ember-data

3
推荐指数
1
解决办法
1930
查看次数

连接到RESTful服务,该服务以"/"结束所有URL

我必须连接到RESTful服务,该服务以"/"结束每个URL.

产品清单位于

http://company.com/api/products/
Run Code Online (Sandbox Code Playgroud)

ID为1的产品为

http://company.com/api/products/1/
Run Code Online (Sandbox Code Playgroud)

这是我的最新消息 app/adapters/products.js

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'http://company.com',
  namespace: 'api'
});
Run Code Online (Sandbox Code Playgroud)

有没有办法配置它,以便它总是结束"/"?

ember.js ember-data

3
推荐指数
1
解决办法
38
查看次数

Ember.js中的同步数据调用

我正在尝试访问评论/ show(/reviews/:id)时执行以下操作:

  • 从服务器加载两个模型:一个review和一个user.
  • 我只能访问该reviewID,所以我需要先加载它,才能获得userId
  • 然后,当它完成加载并且我现在有了userId,查询user使用的userId属性review
  • 最后,在哈希中返回这两个,这样我就可以在模板中使用它们

所以两个同步数据库查询,然后model在路径的钩子中一次返回它们.

我不介意它是缓慢的,它的速度不够快,现在我需要它的工作现在.

这是我尝试过的,它不起作用:

评论/ show.js

export default Ember.Route.extend({
  model: function(params) {
    var user;
    var review = this.store.findRecord('review', params.id).then(
      function(result) {
        user = this.store.findRecord('user', result.get('userId'));
      }
    );

    return Ember.RSVP.hash({
      review: review,
      user: user
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

javascript synchronization ember.js ember-data

3
推荐指数
1
解决办法
1220
查看次数

Emberjs排序记录

我想按日期降序排序我得到的记录.

//model definition
export default DS.Model.extend({
   name: DS.attr('string'),
   date: DS.attr('number')
}
Run Code Online (Sandbox Code Playgroud)

我试过return this.store.findAll('mymodel').sortBy('date')但没有成功.我使用的是2.3.0版本.

//the data
"mymodel" : {
  "-KBJDc1Ccg2kny1Vzn5B" : {
    "date" : 1456350696971,
    "name" : "Jhon"
  },
  "-KBJH_JN6G-AiAVsRfCS" : {
    "date" : 1456349784907,
    "name" : "Peter"
  },
  "-KBK6ZaiI-6o6KPocrSJ" : {
    "date" : 1456348227848,
    "name" : "Paul"
  }
}
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data

3
推荐指数
1
解决办法
2737
查看次数

如何在Ember.js中创建计算属性以查看单个Ember Data属性是否为脏?

我试过在Ember Data 1.13.16模型上创建一个计算属性,如下所示:

export default DS.Model.extend({
  name: DS.attr('string'),
  isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function() {
    return !!this.changedAttributes()['name'];
  })
});
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,在调用model.save()属性之后永远不会重新计算为false,即使name不再存在changedAttributes().如何使此计算属性有效?

这是一个简化的测试用例:https://ember-twiddle.com/87b1af7abfb103554cb2?openFiles = model.author.js%2C

javascript ember.js ember-data computed-properties

3
推荐指数
1
解决办法
297
查看次数