烬。 DS.Adapter的自定义createRecord无法触发

时间:2016-06-13 14:10:07

标签: javascript ember.js ember-data adapter ember-cli

我正在我的Addon中创建一个表单,它将保存商店中的记录,并通过post api调用发送一个JSON对象到rails后端。

我的问题是方法" createRecord"不会被我的适配器内的自定义覆盖。它基本上创建了记录,但通过使用默认的" createRecord"余烬数据法。

附加/适配器/ 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';

附加/模型/ 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')
});

附加/路由/ 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-地址     createTrade =" createTrade"    }}

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

1 个答案:

答案 0 :(得分:1)

您不要在适配器上调用createRecord,而是在商店本身调用。您也可以覆盖service:store,如果您真的想要,但为什么要这样做呢?

export default DS.Store.extend({
  createRecord() {
    this._super(...arguments);
    debugger;
  }
});

适配器是商店和后端之间的适配器。因此,它不会知道何时创建记录,而只是在保存记录时。要在其上保存记录呼叫.save()

this.store.createRecord('trade',trade).save(); // will return a promise