2013-12-13 29 views
0

我是Ember.js的新手,我試圖弄清楚Select視圖如何將其選擇綁定到控制器。我有這樣的模板:Ember Select由其他Ember填充選擇不更新選擇綁定

{{view Ember.Select 
    contentBinding="content" 
    selectionBinding="selectedCompany" 
    optionLabelPath="content.name"}} 


{{view Ember.Select 
    contentBinding="selectedCompany.employees" 
    selectionBinding="selectedEmployee" 
    optionLabelPath="content.name"}} 


Employee: {{selectedEmployee.name}} 
Age: {{selectedEmployee.age}} 

我發現第二選擇不更新時selectedCompany變化,但我不能引用selectedEmployeenameage的值,直到我改變了第二個選擇的值不同的值物理。

如何在第一次選擇更改時設置selectedEmployee以便我可以使用它的值?

爲了更加清晰,我有我的工作代碼here

回答

1

更改第二個選擇框的內容並不會改變其選擇。你必須做手工,例如通過添加下面的方法到控制器

onChangeCompany : function() { 
    if (!this.get('selectedCompany.employees').contains(this.get('selectedEmployee'))) { 
     this.set('selectedEmployee', this.get('selectedCompany.employees').objectAt(0)); 
    } 
}.observes('selectedCompany') 

它還是老樣子需要一些非空和陣列範圍檢查,但做這項工作 - 如果你選擇一個員工,然後更改公司,員工也會改變。

+0

這是有道理的,但似乎並不奏效。 'null'由於某種原因被'objectAt'方法返回,而不是返回第一種形式,我認爲這是造成問題的原因。 'get'員工似乎在返回promise數組時工作,但我不知道如何從中檢索值。 – chanko08

+0

如果'selectedCompany.employees'尚未加載,'objectAt(0)'將是未定義的。您必須在數組加載時再次調用函數,因此將此數組的內容添加到觀察屬性中:'.observes('selectedCompany','selectedCompany.employees。@ each')'。 –

+0

好吧,這是有道理的。這似乎與使模型的關係異步相關。在第二個觀察屬性中添加可以解決此問題,謝謝。 – chanko08