Javascript 余烬模型:如何强制从服务器重新获取记录?

Javascript 余烬模型:如何强制从服务器重新获取记录?,javascript,ember.js,adapter,ember-model,Javascript,Ember.js,Adapter,Ember Model,我的后端公开了以下查询: GET/api/foos 返回适合在主列表中显示的所有FOO的列表 GET/api/foos/:foo\u id 返回单个Foo,其中包含更详细的信息,适合在详细视图中显示 “我的前端”在左侧显示一个FOO列表,当单击其中一个时,右侧的插座(在插座中)显示其详细版本 {{#each foo in model}} {{#link-to 'foo' foo}}{{foo.name}}{{/link-to}} {{/each}} {{outlet}} 我

我的后端公开了以下查询:

  • GET/api/foos
    • 返回适合在主列表中显示的所有FOO的列表
  • GET/api/foos/:foo\u id
    • 返回单个Foo,其中包含更详细的信息,适合在详细视图中显示
“我的前端”在左侧显示一个FOO列表,当单击其中一个时,右侧的插座(在插座中)显示其详细版本

{{#each foo in model}}
    {{#link-to 'foo' foo}}{{foo.name}}{{/link-to}}
{{/each}}
{{outlet}}
我正在使用来存储我的模型,并且已经实现了
App.Foo.adapter
find
findAll
钩子,这样当调用它们时,它们会正确地命中上面描述的后端API

当我的应用程序首先点击
GET/api/foos
(通过
findAll
),然后当用户点击Foo时,余烬模型没有点击
GET/api/foos/:Foo\u id
,因为它没有调用
find
钩子,因为它意识到特定的模型已经在缓存中

这很好,因为当我们知道我们的记忆中已经有东西时,为什么还要再去拿呢

然而,在我的应用程序中,这个假设是不够的。我必须进一步检查我是否已获得该Foo的完整版本,例如
!!aFoo.get('propertyOnlyInDetailedVersion')
,否则我想强制Foo再次获取


如何执行此操作?如何使ember model重新获取之前已获取的对象?

这曾经是一个已知问题,但最近得到了修复

逐字摘自:(钟的评论)

开发人员可以在扩展的类上定义“transient:false” Ember.Model,这将跳过缓存检查

提交:

将您的
ember模型
更新到相关版本,您就可以开始工作了

--

编辑:对不起,我以为下一个块文本是我最后一次编辑的,但可惜没有


所以我现在的想法是做一些类似于
CachedModel扩展LiveModel扩展Ember Model
。然后分别将
transient
设置为
true
false

因此,这就是我最终的结果:

App.FooDetailRoute = Ember.Route.extend({
    model: function() {
        var foo = this.modelFor('foo');
        if (!foo.get('propertyOnlyInDetailedVersion')) {
            //if foo does not have propertyOnlyInDetailedVersion property, we know that only the
            //summarised foo has been last fetched.
            //to force a re-fetch, we trick ember-model by setting isLoaded to false
            //before triggering fetch once more
            foo.set('isLoaded', false);
            var refetchedFoo = App.Foo.find(parseInt(foo.get('id'), 10));
            return refetchedFoo ;
        }
        return foo;
    }
});

tl;dr=将model.isLoaded设置为false,然后再次调用model.find。

谢谢您的回答。但是,我确实希望保留这个缓存版本,而是执行我自己的测试,以确定是否应该重新获取它,如上所述。本质上,我希望能够在每次调用
find
时确定它是否是“瞬态的”。你有什么建议可以让我做这件事吗?@seth-谢谢你给我指明了正确的方向。我有自己的解决办法。我认为我的用例太具体了,无法将PR提交给
ember model
over-所以我将把它作为“为我工作”的东西+我想我的答案要完整一点。。所以我编辑了我最初想法的答案。但我看到你已经有了解决办法!@赛斯-是的,我知道你要去哪里。。点击这里,如果你提交了一个公关到余烬模型与通用版本的,或什么,我很想知道。真棒。我很高兴你解决了这个问题(y)