怎么做?简单JS .length返回undefined.
我需要找到一种在Ember Data中建立单向关系的方法.到目前为止,我只把关系放在一个模型中,而且效果很好.问题是当模型B被删除时,模型A变脏了,即使模型A完全没有模型B的概念.我怎样才能让模型B指向模型A,并使其完全忽略关系?我不介意声明A类中的关系有正确的反转,我只是不希望类型A的模型在关系发生变化时变脏.
另外,仅供参考,我使用的是相当旧的Ember版本.我从8月26日开始使用Ember.js RC7和Ember Data.在你问之前,不,我不升级.
我试图使用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) 我有一条创建新记录的路线,如下所示:
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不允许它,它是隐含的.所以我不知道我错过了什么......
任何帮助是极大的赞赏!
当相关数据以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.
在需要检查相关数据是否存在的情况下,我应该怎么做,如下例所示?
model.filter(function(item) {
return item.get('is_available') || item.get('user_completion') !== null;
});
Run Code Online (Sandbox Code Playgroud)
我真的只需要检查user_completion是否是PromiseObject?这看起来有点奇怪,我觉得我在其他地方犯了一个错误.
我必须连接到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)
有没有办法配置它,以便它总是结束"/"?
我正在尝试访问评论/ show(/reviews/:id)时执行以下操作:
review和一个user.reviewID,所以我需要先加载它,才能获得userIduserId,查询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) 我想按日期降序排序我得到的记录.
//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 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