这可能会滥用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,我想知道有多少记录,或者这是否是一个有效的问题。
答案 0 :(得分:1)
将store.find
的结果加载到Ember.ArrayController
的{{1}}中,然后将content
的长度绑定到content
。一个例子:
modelCount
答案 1 :(得分: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"),
...