0

假设我执行以下请求:

App.Phones.find({'country' : 'DE'});

我的后端回复了一些电话号码。现在我这样做:

App.Phones.find({'country' : 'ES'});

现在我得到了其他电话号码。但:

App.Phones.all();

积累了“旧”号和新号。是否可以在调用查找之间清理商店?如何?

我试过了App.Phones.clean();,没有成功(has no method 'clean'

编辑

这很奇怪,但是:record.destroy();在一个对象上调用(如直觉像素所建议的那样)不会将其从商店中删除,它只是将其标记为destroyed=true. 这意味着,下拉菜单仍显示该选项。实际上,遍历记录(all())表明记录被销毁后仍然存在。也许 Ember 最终会将它们从商店中删除,但这对我完全没有帮助:因为我的 select 绑定到all(),所以我需要立即删除它们。

更糟糕的是:由于对象存在,但已销毁,选择显示它,但不允许选择它!

我可以想到一个非常丑陋的 hack,我在其中创建了一个Ember.A过滤记录(删除destroyed 记录),如下所示:

  1. 销毁所有记录(旧的)
  2. 从后端请求新记录
  3. 收到记录后(.then),遍历存储中的记录(.all()),即销毁的和新的。
  4. 添加数组中未destroy编辑的记录
  5. 将选择绑定到此过滤后的数组。

这看起来非常难看,我真的很惊讶 Ember 不能完全可靠地清理存储以获取某种记录类型。

4

2 回答 2

0

我想您可以执行以下操作来清理商店中保存的Phones记录:

App.Phones.find({}); //this will invalidate your cache

但显然这将发出一个新的请求来检索所有电话号码。

根据您想要实现的目标,您可以find()在应用程序路由中使用,然后在其他路由中使用其中一个all()或 afilter()来检索 justDEES。换句话说,没有这样的方法可用于执行以下操作:App.Phones.clean().

更新

我可以想到的另一种方法(手动)从缓存中删除一种类型的记录可能是在您的操作中逐个删除它们find(),例如创建一个包含以下代码的简单实用程序函数,并将其称为 beetwen 您的调用至find()

App.Phones.all().forEach(function(record) {
  record.destroy();
});

希望能帮助到你。

于 2013-08-11T23:27:45.793 回答
0

所以,这是我想出的(不满意、丑陋、hacky、不直观的)代码。它正在做这项工作,但我对此有一种非常不好的感觉:

getNewPhones : function (countryCode, subtype, city) {
    // Mark old records as destroyed
    App.Availablephone.all().forEach(function(phone, index) {
        phone.destroy();
        console.log('Destroyed phone %o', phone);
    });
    // Not possible to set the availablePhones to .all(), because old records are still there
    //App.Availablephone.find({country : countryCode, subtype : subtype, city : city});
    //this.set('availablePhones', App.Availablephone.all());
    // So, hack is in order:
    //   1. request new data
    //   2. filter all records to just get the newly received ones (!!!)
    var _this = this;
    App.Availablephone.find({country : countryCode, subtype : subtype, city : city}).then(function(recordArray) {
        var availablePhones = Ember.A();
        App.Availablephone.all().forEach(function(phone, index) {
            if(!phone.isDestroyed) {
                console.log('Adding phone=%o', phone);
                availablePhones.push(phone);
            }
        });
        _this.set('availablePhones', availablePhones);
    });
},

非常欢迎评论/批评/改进建议!

于 2013-08-12T09:17:41.127 回答