【发布时间】:2017-04-29 15:21:17
【问题描述】:
简而言之,我在路由的模型挂钩中创建了一条记录(“claimant”),但是当我尝试在操作处理程序中获取“claimant”记录时,Ember 说该记录不存在。结果,当我尝试保存“索赔人”时,Ember 告诉我它“无法读取未定义的属性‘保存’。”我猜这是我的初始化程序的问题,但我不知道为什么。
任何帮助将不胜感激。谢谢!
相关代码如下:
models/claimant.js
import attr from 'ember-data/attr';
import DS from 'ember-data';
import { belongsTo } from 'ember-data/relationships';
export default DS.Model.extend({
first_name: attr('string'),
submission: DS.belongsTo('submission', {async: false}),
});
models/submission.js
import DS from 'ember-data';
import { belongsTo } from 'ember-data/relationships';
export default DS.Model.extend({
claimant: belongsTo('claimant', {async: false}),
});
routes/claimant.js
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
next: function() {
let claimant = this.get('claimant');
claimant.save().then(claimant => {
this.get('submission').createSubmission({
claimant: claimant
});
});
this.transitionTo('defendant');
},
},
model() {
let claimant = this.get('store').createRecord('claimant', {
first_name: this.get('first_name'),
});
return claimant;
}
});
注意:如果我改用 let claimant = this.get('controller.model');记录正确保存,但是“提交”和“索赔人”之间的 BelongsTo 关系没有正确设置。不知道为什么。
initializers/submission-initializer.js
import Ember from 'ember';
const {isNone, isEmpty, merge} = Ember;
let submissionProxy = Ember.ObjectProxy.extend({
_currentSubmission: null,
_store:null,
content: function() {
let currentSubmission = this.get('_currentSubmission');
if (isEmpty(currentSubmission)) {
currentSubmission = this.createSubmission();
}
return currentSubmission;
}.property('_currentSubmission'),
current: Ember.computed.alias('content'),
createSubmission(data = {}) {
let newSubmission = this.get('_store').createRecord('submission', data);
this.set('_currentSubmission', newSubmission);
return newSubmission;
},
});
export function initialize(application) {
application.register('submission:proxy', submissionProxy, {singleton: true});
application.inject('submission:proxy', '_store', 'service:store');
application.inject('component', 'submission', 'submission:proxy');
application.inject('route', 'submission', 'submission:proxy');
application.inject('controller', 'submission', 'submission:proxy');
};
export default {
name: 'submission-initializer',
after: ['ember-data'],
initialize: initialize
};
模板/claimant.hbs
<h2 id="title">Welcome to the Claimant Page!</h2>
<form>
<div class="form-group">
<label for="first_name">First Name</label>
{{input id="first_name" class="form-control" value=model.first_name}}
</div>
<button class="btn btn-primary" {{action 'next' model}}>Next</button>
</form>
【问题讨论】:
-
我对 EmberJS 很陌生,但我认为您在 'let claimant = this.get('claimant');' 中定义的变量 'claimant'从字面上看被设置为未定义。因此,您会收到该错误。
标签: ember.js