2013-10-16 75 views
3

陣列數據這是一個後續行動:accessing another models data in ember.js如何訪問隱藏在DS.PromiseArray

我有一個情況我想過濾列表,並附有選擇的多選框。發送數據時,this.store.find('tag')始終返回DS.PromiseArray。 Ember.Select似乎處理這個罰款,但選擇多選擇似乎並不喜歡它。我已經看到了這樣的事情:

this.store.find('tag').then(function(items) { 
    return items.map(function(item){ 
     return [item.get('id'), item.get('name')] 
    }) 
}) 

,但我似乎總是得到一個類型錯誤{}在地圖功能...

這裏是概括的問題的jsfiddle: http://jsfiddle.net/viciousfish/TEZjW/

獎勵積分!演示將選定的選擇顯示爲單個選擇(爲了清晰起見)。我想在App.MultipleSelect

更新以此爲多選,它可以設置通過設置multiple: true這裏是什麼,我認爲應該工作的另一個的jsfiddle,但似乎沒有! http://jsfiddle.net/viciousfish/FZ6yw/1/

,並進一步,這種小提琴表明。那麼應該努力解構promiseArray http://jsfiddle.net/marciojunior/DGT5L/

回答

6

這是一個功能性的jsfiddle http://jsfiddle.net/FZ6yw/2/

我感動的承諾的代碼路徑的afterModel鉤,如承諾友好https://gist.github.com/machty/5723945

我也改變了地圖功能,你正在返回數組和在我的代碼,它返回對象

App.AssetsRoute = Ember.Route.extend({ 
    model: function() { 
    return this.store.find('asset'); 
    }, 
    afterModel: function() { 
    var self = this; 
    return this.store.find('tag').then(function(items) { 
     var allTags = items.map(function(item){ 
      return {id:item.get('id'), name:item.get('name')}; 
     }); 
     self.controllerFor('tags').set('content', allTags); 
    }) 
    }, 
});