我使用Ember 1.13,我認爲這在2.x中已被棄用/更改,但該項目不會升級。將數據從應用程序控制器傳遞到子控制器
也許我不會以正確的方式去解決這個問題,或者錯過簡單的東西。無論哪種方式,我需要做的是在模式中添加一種新飲料,然後用新飲料(作爲表中的一行)更新菜單數據。
我有一個父級管理員控制器(admin.menu)內的菜單控制器。我有一個模式,我添加數據,模態似乎需要在應用程序控制器之外的任何插座,否則它不會正確呈現。所以,我在應用程序控制器中添加了新的飲料。
// controllers/application.js
export default Ember.Controller.extend({
menuController: Ember.inject.controller('admin.menu'),
...
actions: {
submitCustomDrink: function(){
// action to create a new custom drink item
let element = document.getElementById("custom-drink-name");
let drinkType = element.value;
Ember.$.ajax({
'url': `${Config.apiRoot}store-drinks/custom/`,
'method': 'POST',
'data': {
drink_name: drinkType
}
}).then(data => {
// Add new drink to the existing drinks list
let drinkArray = this.get("menuController.drinkArray");
let drinkObject = {
"drinkType": drinkType,
"drinkSet": data
};
drinkArray.push(drinkObject);
data.forEach(drink => {
this.store.push('store-drink', drink);
console.log(`pushed ${drink.type} of ${drink.size} into store`);
});
// reset modal input
element.value = "";
}, function(err){
console.log('error', err);
});
}
}
});
在那個應用程序控制器中,我注入了使用我添加的數據的菜單控制器。
當我添加新飲料時,我期待templates/admin/menu.hbs
中的表格有額外的一排。行由使用控制器中的drinkArray
的組件生成。
<tbody>
{{#each drinkArray as |drink|}}
{{joe-menu-row drinkSet=drink.drinkSet type=drink.drinkType detailDrink=detailDrink}}
{{/each}}
</tbody>
- 加載頁面時,此代碼的工作,得到所有的飲料和創建行。
- 添加新飲料並重新加載頁面後,新飲料出現,但我需要顯示它,而無需重新加載頁面。
- 通過在應用程序控制器控制檯日誌,我看到
this.get("menuController.drinkArray")
返回的飲料名單,以及運行drinkArray.push(drinkObject)
- 新的飲料對象後返回新的飲料作爲它的一部分也正在推進店正確,根據燼檢查
- 我想,也許它的更新本地變量,而不是在菜單控制的財產,所以我也嘗試過類似
this.get("menuController").set('drinkArray', drinkArray)
,但具有相同的結果
pushObject做了詭計,並感謝蟲洞暗示 – awwester
嗯實際上有一點問題。行被添加,但飲料不會保存。說'drink.save()'不是一個函數。調試'drink',新添加的飲料是一個對象,但其他單元格是 – awwester
通過首先推送來存儲,然後從商店獲取這些對象(在我使用API原始數據之前,而不是來自商店的對象)。謝謝! – awwester