gpt4 book ai didi

javascript - Ember Fixture Adapter 未设置记录 ID

转载 作者:行者123 更新时间:2023-12-03 16:32:34 25 4
gpt4 key购买 nike

好的,所以我正在尝试将现有模型复制为新模型实例(因此所有属性都相同,除了它的 ID。在我的模板中,我有一个操作,copy,将列表中该位置范围内的模型传递给 Controller ​​,以便可以将其复制。我的 Controller 代码在下面。我似乎能够创建一个新记录,但它的 ID 设置为“fixture-0”, 'fixture-1' 等,并在其上调用 .save()(见下文)导致错误,

Uncaught TypeError: Cannot call method 'serialize' of undefined 

由于我目前正在为开发 stub 模型,所以我正在使用夹具适配器,因为它似乎与问题有关。

Controller 代码:

REApp.ApplicationController = Ember.ArrayController.extend({
actions: {
copy: function(current_model){
var self = this;
console.log(current_model);

var new_record = this.store.createRecord('cycle', {
railsId: null,
accountId: current_model._data.accountId,
//lots more attributes here
});

new_record.save();
console.log(new_record);
}
}
});

console.log 来自 Controller 的调用,显示 new_record:

a {id: "fixture-0", store: a, container: t, currentState: Object, _changesToSync: Object…}

注意:即使您从 Controller 中取出 .save() 方法调用,也会创建此新记录并将 id 设置为字符串。如果 .save() 没有被调用(因此在 Controller 中没有出现错误),那么新记录将出现在 ember 检查器的数据面板中,其 ID 设置为字符串如上。

这只是我的第三个 Ember 应用程序(也是我的第一个 1.3.0 应用程序),所以请接受我只是做错了的想法。

编辑:这是模型定义。如果它是相关的,我有其他错误从 Controller 返回 varOfModelObject.save();this.content.save(); ,所以 def 认为它是与 FixtureAdapter 相关。

REApp.Cycle = DS.Model.extend({
//id: DS.attr('number'), not needed with fixtures
railsId: DS.attr('number'),
siteId: DS.attr('number'), //all numbers here are ints unless noted
clientId: DS.attr('number'),
accountId: DS.attr('number'),
startAt: DS.attr('datetime'),
endAt: DS.attr('datetime'),
chargePerEvent: DS.attr('decimal', {defaultValue: 0.0}),
createdAt: DS.attr('datetime'),
updatedAt: DS.attr('datetime'),
scheduleYaml: DS.attr('string'),
allDay: DS.attr('boolean'),
repeat: DS.attr('boolean'),
exceptionDates: DS.attr('string'),
additionalDates: DS.attr('string'),
charge: DS.attr('number'), //decimal in rails
chargePeriod: DS.attr('string'),
oldRegularEventId: DS.attr('number'),
scheduleHuman: DS.attr('string'),
bagLimit: DS.attr('number'),
untilDate: DS.attr('number'),
sendToWebfleet: DS.attr('boolean', {defaultValue: false}),
contractId: DS.attr('number'),
hourlyRate: DS.attr('number'), //decimal in rails
hourlyCharge: DS.attr('number', {defaultValue: 0.0}), //decimal in rails
doubleEvent: DS.attr('number'),
//these are used for the simple view
weekdays: DS.attr('boolean', {defaultValue: null}),
weekends: DS.attr('boolean', {defaultValue: null}),
//data below this needed for associations
clientName: DS.attr('string'),
commentBody: DS.attr('string'),
siteAddress: DS.attr('string'),
carer1Id: DS.attr('number', {defaultValue: null}),
carer1Name: DS.attr('string'),
carer2Id: DS.attr('number', {defaultValue: null}),
carer2Name: DS.attr('string'),
users: DS.hasMany('user', {async: true}),
items: DS.hasMany('item', {async: true})
});

最佳答案

正如上面评论中提到的,当使用夹具时,您可以在内存中创建新对象,但它们与硬编码夹具对象的区别在于对象 ID 中的 fixture- 前缀.因此,您可能会发现行为有点古怪——也许这会在较新版本的 Ember Data 中得到修复,但与此同时,答案似乎是停止使用夹具数据并转向实时数据情况在您的开发过程中尽可能快。

关于javascript - Ember Fixture Adapter 未设置记录 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com