商店中记录数量的计算属性?

时间:2014-01-18 06:28:04

标签: ember.js ember-data

这可能会滥用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,我想知道有多少记录,或者这是否是一个有效的问题。

2 个答案:

答案 0 :(得分:1)

store.find的结果加载到Ember.ArrayController的{​​{1}}中,然后将content的长度绑定到content。一个例子:

modelCount

请参阅a working example in http://jsbin.com/iCuzIJE/1/edit

答案 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"),

...