2013-11-25 147 views
-1

我有这样的代码在这里:更新选择框后的另一种选择框更改

App.SearchController = Ember.ObjectController.extend({ 
selectedCabinet: null, 
selectedTabs: null, 

selectCabinetData: function() { 
    return this.store.find('cabinets') 
}.property('@each.cabinets') , 

actions: { 
    searchFiles: null, 
}, 
selectedCabinetChanged: function() { 
    console.log(this.selectedCabinet.id) 
    if (this.selectedCabinet){ 
     return this.store.find("tabs", {cabinet: this.selectedCabinet.id}) 
    }else{ 
     return null; 
    } 
}.observes('selectedCabinet') 
}); 

我可以看到Ajax请求并筛选,但它不这里更新选择框

{{视图Ember.Select contentBinding = selectCabinetChanged selectionBinding = “selectedTabs” optionValuePath = “content.id” optionLabelPath = “content.tab_name” 提示= “选择一个选项卡”}}

基本上基于第一个选择框的值将决定另一个的结果。

我是否缺少一些简单的东西?

+0

为什么标记Django? – tunaktunak

+0

对不起,我离开了我使用烬 – thedemon

回答

1

this.store.find("tabs", { ... })返回一个承诺,而不是数组,所以你需要创建一个filteredTabs财产,从解决承诺的结果设置的值:

App.SearchController = Ember.ObjectController.extend({ 
    selectedCabinet: null, 
    selectedTabs: null, 
    filteredTabs: null, 
    selectCabinetData: function(){ 
     return this.store.find('cabinets') 
    }.property('@each.cabinets'), 
    actions: { 
     searchFiles: null, 
    }, 
    selectedCabinetChanged: function() { 
     var controller = this;   
     if(this.get('selectedCabinet')){ 
      this.store.find("tabs", { cabinet: this.get("selectedCabinet.id") }).then(function(filteredTabs) { 
       controller.set('filteredTabs', filteredTabs); 
      }); 
     } else { 
      controller.set('filteredTabs', null); 
     } 
    }.observes('selectedCabinet') 
}); 

更新您的contentBinding=selectCabinetChangedcontentBinding=filteredTabs这样的:

{{view Ember.Select contentBinding=filteredTabs selectionBinding="selectedTabs" optionValuePath="content.id" optionLabelPath="content.tab_name" prompt="Select A Tab"}} 
+0

我所做的变化使Django的休息适配器: App.SearchController = Ember.ObjectController.extend({ selectedCabinet:空, selectedTabs:空, selectCabinetData :函数(){ 回报this.store.find( '柜') } .property( '@ each.cabinets'), 操作:{ searchFiles:空, }, selectedCabinetChanged:函数(){ (“已更改”) if(this.selectedCabinet){ return this.store.find(“tabs”,{cabinet:this.get(“selectedCabinet.id”)}) } else { return null; } } .property('selectedCabinet') }); – thedemon

+0

现在它并没有捕捉到第一个选择框的变化。 – thedemon

+0

我更新了答案,那个时候你有观察员回来,但是现在contentBinding等于filteredTabs –