2016-05-12 17 views
1

我有一個名爲tickets路線這有它的像這樣無法調用foreach所模型散列控制器

model() { 
    return Ember.RSVP.hash({ 
    event: null, 
    tickets: null 
    }); 
}, 
actions: { 
    didTransition(){ 
    if(!this.controller.get('model.length')){ 
     new Ember.RSVP.hash({ 
     event: this.modelFor('events.event'), 
     tickets: this.store.query('ticket',{user_id:this.get('user.user.user_id'),event_code:this.modelFor('events.event').get('event_code')}) 
     }).then((hash)=>{ 
     if(!hash.tickets.get('length')){ 
      this.controller.set('noTickets',true); 
     } 
     this.controller.set('model',hash); 
     }); 
    } 
    } 
} 

模板對這些model.tickets只是在一個{{#each}}塊精細管理,以循環模式設置

在我的控制,我試圖安裝一個groupBy計算的,但在我的計算是從哪裏獲得的錯誤

ticketsByPurchase: Ember.computed('model.tickets.[].ticket_purchase_code',function(){ 
    let tickets = this.get('model.tickets'); 
    tickets.forEach(function(ticket){ 
     console.log(ticket); 
    }); 
    }) 
+0

你可能會想用'@ each',而不是'[]'你相依性。 'model.tickets。@ each.ticket_purchase_code' – Kingpin2k

回答

2

嘗試防範上迭代的model.tickets,與計算出的屬性是這樣的:

if(!tickets){ 
    return Ember.A() 
}else{ 
    //your forEach code here 
} 

或本在你的路線:

}).then((hash)=>{ 
    if(!hash.tickets.get('length')){ 
     this.controller.set('noTickets',true); 
     hash.tickets = Ember.Array([]) 
     this.controller.set('model',hash); 
    }else{ 
     this.controller.set('model',hash); 
    } 
    }); 
+0

您不需要將Ember.Array',Ember中的'[]'包裝爲默認擴展數組來實現'Ember.Enumerable','Ember.MutableEnumerable','' Ember.MutableArray'和'Ember.Array'接口。 https://guides.emberjs.com/v1.10.0/configuring-ember/disabling-prototype-extensions/ – Kingpin2k

+0

鏈接到更新的Ember原型:https://guides.emberjs.com/v2.5.0/configuring-ember/ disabling-prototype-extensions/ – Kingpin2k

0

this.controller.get('model.length')總是空,因爲模型是一個哈希,而不是一個數組。另外didTransition不是一個動作,它是一個常規函數,所以如果在動作哈希中定義它可能不會觸發。

我會建議刪除調用didTransition和做所有的邏輯模型中的鉤子,像這樣:

model() { 
    let event = this.modelFor('events.event'); 
    let event_code = event.get('event_code'); 

    // this probably does not work, you have to get the user 
    // from another route or a service. 
    // this might work: this.controllerFor('user').get('user.user_id'); 
    let user_id = this.get('user.user.user_id'); 

    return Ember.RSVP.hash({ 
    event, 
    tickets: this.store.query('ticket', { user_id, event_code }) 
    }); 
}, 

setupController(controller, model) { 
    // super sets controller model to be route model. 
    // ie. controller.set('model', model); 
    this._super(...arguments); 

    if (!model.get('tickets.length')) { 
    controller.set('noTickets', true); 
    } 
} 
+0

'didTransition'是一個事件,並且屬於動作散列。 http://emberjs.com/api/classes/Ember.Route.html#event_didTransition。其他的是'activate','deactivate','error','loading','willTransition' – Kingpin2k