2015-01-19 3 views
0

Мой URL-адрес выглядит как http://localhost:4099/checkout/schedule/new?addressId=12 Я пытаюсь передать запрос param addressId в форму.Как передать значение параметра запроса в форму?

Я пробовал представить его как скрытый ввод, но к тому времени, когда он попадает в действие save. Я проверить вкладку Ember инспектора Network и это то, что она проходит:

{"delivery":{"instructions":"foo","deliver_on":"bar","address_id":null}} 

address_id еще null. Что мне не хватает?

Полный код ниже:

// app/pods/checkout/schedule/new/route.js 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model: function() { 
    return this.store.createRecord('delivery'); 
    // return this.store.createRecord('delivery', { addressId: this.get('addressId')}); 
    }, 
    // Cleanup the controller, when you leave the new route so the stale new record is also 
    // removed from the store. 
    // You can also use https://github.com/dockyard/ember-data-route instead 
    resetController: function (controller, isExiting) { 
    var model = controller.get('model'); 

    if (!model.get('isDeleted') && isExiting && model.get('isNew')) { 
     model.deleteRecord(); 
    } else { 
     model.rollback(); 
    } 
    } 
}); 

// app/pods/checkout/schedule/new/controller.js 
import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    queryParams: ['addressId'], 
    addressId: null, 

    actions: { 
    save: function() { 
     var _this = this; 

     // this.get('model').set('addressId', this.get('addressId')); 
     this.get('model').save().then(function(){ 
     _this.transitionToRoute('checkout.address.index'); 
     }, function() { 
     // Need this promise, so we can render errors, if any, in the form 
     }); 

     return false; 
    }, 
    cancel: function() { 
     return true; 
    } 
    } 
}); 

// app/pods/checkout/schedule/new/template.hbs 
<form {{action "save" on="submit"}}> 
    {{addressId}} 
    {{input type="hidden" value=addressId}} 

    <p> 
    <label>Instructions: 
     {{input value=model.instructions}} 
    </label> 

    {{#each error in errors.instructions}} 
     <br />{{error.message}} 
    {{/each}} 
    </p> 

    <p> 
    <label>Deliver on: 
     {{input value=model.DeliverOn}} 
    </label> 

    {{#each error in errors.DeliverOn}} 
     <br />{{error.message}} 
    {{/each}} 
    </p> 

    <input type="submit" value="Next"/> 
    <button {{action "cancel"}}>Cancel</button> 
</form> 

// app/models/delivery.js 
import DS from 'ember-data'; 

export default DS.Model.extend({ 
    address:  DS.belongsTo('address', { async: true }), 
    items:  DS.hasMany('item', { async: true }), 
    instructions: DS.attr('string'), 
    deliverOn: DS.attr('string') 
}); 

ответ

0

Я считаю, что это происходит, что вы на самом деле не отправить форму. Вместо этого вы вызываете save() на свою модель, которая представляет ваши данные модели. Поэтому скрытый параметр в форме вам не поможет.

Вашего addressId в URL привязан к вашей addressId собственности в контроллере, где, как addressId: null вы видите быть представлены в Chrome является значением addressId собственности в модели

+0

Как я могу получить доступ 'addressID' из формы? –

+0

'addressId' с контроллера должен быть доступен вам в форме, но отправить его как часть модели - вам нужно будет явно установить его – Kalman

Смежные вопросы