2014-01-18 46 views
2

這可能會濫用Ember,但我想爲商店中的物品數量創建計算屬性。商店中記錄數量的計算屬性?

我試圖原型,完全存在客戶端的UI。我正在使用本地存儲適配器的夾具數據。這樣,我可以開始使用罐裝數據,但我也可以添加數據,並在重新加載時保持數據。

由於我目前工作在數據層上,我已經建立了一個settings路線,讓我一個UI重置各種型號。我想添加一個Handlebars表達式,如{{modelCount}},這樣我可以看到商店中有多少條記錄。這比使用Ember Data Chrome擴展程序更快,該擴展程序會重置爲每個頁面重新加載的路徑選項卡。

下面將告訴我的記錄一次人數,但是當記錄更改的數量並沒有改變:

modelCount: function() { 
    var self = this; 
    this.store.find("my_model").then(function(records) { 
     self.set("modelCount", records.get("length")); 
    }); 
}.property() 

我得到這家店應該是代理在現實世界中的API,以及find返回一個承諾,但這是關於我的知識的限制。我不知道如何告訴Ember我想知道有多少記錄,或者這是否是一個有效的問題。

回答

1

負荷store.find結果成Ember.ArrayControllercontent然後的content長度結合至modelCount。舉例:

App.SomeRoute = Ember.Route.extend({ 
    model: function(){ 
    return this.store.find('my_model'); 
    } 
}); 

App.SomeController = Ember.ArrayController.extend({ 
    modelCount: Ember.computed.alias('content.length') 
}); 

請參閱a working example in http://jsbin.com/iCuzIJE/1/edit

+0

是否有可能做到這一點在任意變量?我問,因爲我的設置路線是作爲一個用戶界面來「重啓」一些模型。那麼,其實我是想是一樣的東西'{{model1Count}}','{{model2Count}}',...(我承認,它也有可能,我試圖做一些事情非常不Emberlike。) – Ryan

+0

作爲Ember 2.x,'ArrayControllers' [已棄用](https://emberjs.com/deprecations/v1.x/#toc_arraycontroller)。 Ember的基本觀測要求你實現自己的[數組類]的一個(https://emberjs.com/api/classes/Ember.Array.html),所以你的模板將更新當陣列更改的條目。 – efx

0

我發現通過組合從@panagiotis回答一個可行的解決方案,以及類似的問題,How to load multiple models sequentially in Ember JS route

在我的路由器,我按順序加載我的模型:

model: function() { 
    var self = this; 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
     self.store.find("model1").then(function(model1) { 
      self.store.find("model2").then(function(model2) { 
       self.store.find("model3").then(function(model3) { 
        resolve({ 
         model1: model1, 
         model2: model2, 
         model3: model3 
        }); 
       }); 
      }); 
     }); 
    }); 
}, 

然後在我的控制,我定義簡單計算性能:

model1Count: function() { 
    return this.get("model1.length"); 
}.property("model1.length"), 

...