gpt4 book ai didi

javascript - Ember 。 DS.Adapter 的自定义 createRecord 不会被触发

转载 作者:行者123 更新时间:2023-12-03 06:44:47 24 4
gpt4 key购买 nike

我正在我的插件中创建一个表单,它将保存存储中的记录,并且还会通过 post api 调用将 JSON 对象发送到 Rails 后端。

我的问题是“createRecord”方法不会被适配器内的自定义方法覆盖。它基本上创建记录,但使用默认的“createRecord”ember-data 方法。

插件/适配器/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')
}
});

应用程序/适配器/trade.js

export { default } from 'ember-p/adapters/trade';

插件/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')
});

插件/routes/checkout.js

import Ember from 'ember';

export default Ember.Route.extend({

actions: {

createTrade: function (trade) {
this.store.createRecord('trade',trade);
this.transitionTo('thanks');
},
}
});

应用程序/模板/checkout.hbs

{{ p地址 创建贸易=“创建贸易” }}

应用程序/模板/组件/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

关于javascript - Ember 。 DS.Adapter 的自定义 createRecord 不会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37791937/

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