2016-06-13 60 views
0

我在我的Addon中创建一个表单,它将保存商店中的记录,并且还会通过post api调用发送一个JSON对象到一个rails后端。灰烬。为DS.Adapter自定义createRecord不会被触发

我的问题是,方法“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'; 

插件/模型/ 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

{{ 对地址 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

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

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

该适配器是商店和后端之间的适配器。所以它不会知道记录何时被创建,但只有当它被保存时才会知道。为了节省记录电话.save()就可以了:

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

感谢您的回答勒克斯。你觉得我应该怎么做呢? 我的想法是,我需要一个适配器和一个序列化程序来使用api所接受的对象进行后期api调用。 也许createRecord不是我要找的。你怎么看? – Wesley

+0

为什么不调用'.save()'? – Lux

+0

太棒了!我现在到了适配器中的方法。谢谢! – Wesley