Ember。 DS.Adapter 的自定义 createRecord 未被触发
Ember. Custom createRecord for DS.Adapter doesn't get triggered
我正在我的 Addon 中创建一个表单,它将在商店中保存记录,并且还会通过 post api 调用发送一个 JSON 对象到 rails后端。
我的问题是方法 "createRecord" 没有被我的适配器中的自定义方法覆盖。它基本上创建了记录,但是使用默认的 "createRecord" ember-data 方法。
addon/adapters/trade.js
import Ember from 'ember';
import ApplicationAdapter from '../adapters/application';
export default ApplicationAdapter.extend({
createRecord: function(store, type, snapshot, trade) {
debugger;
console.log('bla')
}
});
app/adapters/trade.js
export { default } from 'ember-p/adapters/trade';
addon/models/trade.js
import DS from 'ember-data';
export default DS.Model.extend({
offer: DS.belongsTo('offer', {async: true}),
firstName: DS.attr('string'),
lastName: DS.attr('string'),
streetName1: DS.attr('string'),
streetName2: DS.attr('string'),
city: DS.attr('string'),
state: DS.attr('string'),
zipcode: DS.attr('string'),
telephone: DS.attr('string'),
email: DS.attr('string')
});
addon/routes/checkout.js
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
createTrade: function (trade) {
this.store.createRecord('trade',trade);
this.transitionTo('thanks');
},
}
});
app/templates/checkout.hbs
{{
p地址
创建贸易="createTrade"
}}
app/templates/components/p-address.hbs
{{yield}}
<h1>Address form</h1>
<form {{action 'createTrade' value="target.value" on="submit"}}>
<div class="form-group">
{{input type="text" placeholder="First name" value=firstName}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Last name" value=lastName}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Street name 1" value=streetName1}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Street name 2" value=streetName2}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="City" value=city}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="State" value=state}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Zipcode"value=zipcode}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Telephone" value=telephone}}
</div>
<br>
<div class="form-group">
{{input type="submit" value="submit"}}
</div>
</form>
您不会在适配器上调用 createRecord
,而是在商店本身上调用。如果你真的想要,你也可以覆盖 service:store
,但你为什么要这样做?
export default DS.Store.extend({
createRecord() {
this._super(...arguments);
debugger;
}
});
适配器是商店和后端之间的适配器。所以它不会知道记录何时创建,而只知道它何时被保存。要保存记录调用 .save()
:
this.store.createRecord('trade',trade).save(); // will return a promise
我正在我的 Addon 中创建一个表单,它将在商店中保存记录,并且还会通过 post api 调用发送一个 JSON 对象到 rails后端。
我的问题是方法 "createRecord" 没有被我的适配器中的自定义方法覆盖。它基本上创建了记录,但是使用默认的 "createRecord" ember-data 方法。
addon/adapters/trade.js
import Ember from 'ember';
import ApplicationAdapter from '../adapters/application';
export default ApplicationAdapter.extend({
createRecord: function(store, type, snapshot, trade) {
debugger;
console.log('bla')
}
});
app/adapters/trade.js
export { default } from 'ember-p/adapters/trade';
addon/models/trade.js
import DS from 'ember-data';
export default DS.Model.extend({
offer: DS.belongsTo('offer', {async: true}),
firstName: DS.attr('string'),
lastName: DS.attr('string'),
streetName1: DS.attr('string'),
streetName2: DS.attr('string'),
city: DS.attr('string'),
state: DS.attr('string'),
zipcode: DS.attr('string'),
telephone: DS.attr('string'),
email: DS.attr('string')
});
addon/routes/checkout.js
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
createTrade: function (trade) {
this.store.createRecord('trade',trade);
this.transitionTo('thanks');
},
}
});
app/templates/checkout.hbs
{{ p地址 创建贸易="createTrade" }}
app/templates/components/p-address.hbs
{{yield}}
<h1>Address form</h1>
<form {{action 'createTrade' value="target.value" on="submit"}}>
<div class="form-group">
{{input type="text" placeholder="First name" value=firstName}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Last name" value=lastName}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Street name 1" value=streetName1}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Street name 2" value=streetName2}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="City" value=city}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="State" value=state}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Zipcode"value=zipcode}}
</div>
<br>
<div class="form-group">
{{input type="text" placeholder="Telephone" value=telephone}}
</div>
<br>
<div class="form-group">
{{input type="submit" value="submit"}}
</div>
</form>
您不会在适配器上调用 createRecord
,而是在商店本身上调用。如果你真的想要,你也可以覆盖 service:store
,但你为什么要这样做?
export default DS.Store.extend({
createRecord() {
this._super(...arguments);
debugger;
}
});
适配器是商店和后端之间的适配器。所以它不会知道记录何时创建,而只知道它何时被保存。要保存记录调用 .save()
:
this.store.createRecord('trade',trade).save(); // will return a promise