gpt4 book ai didi

javascript - 如何让 Ember.js 在显示 View 之前加载 RESTAdapter 数据?

转载 作者:行者123 更新时间:2023-11-28 08:59:18 24 4
gpt4 key购买 nike

我有一个带有 RestAdapter 的应用程序,它从服务器获取正确的数据:

App.AFile= DS.Model.extend({
name: DS.attr( 'string' ),
...

App.Store = DS.Store.extend({
revision: 13,
adapter: DS.RESTAdapter.extend({url: "myapi"})
});

还有这样的 map :

App.Router.map(function() {
this.resource('allfiles', { path: '/allfiles' });
this.resource('onefile', {path: '/onefile/:onefile_id' });

路由定义如下:

App.allfilesRoute = Ember.Route.extend({
model: function()
{
return App.AFile.find();
}
});

App.onefileRoute = Ember.Route.extend({
model : function(params)
{
return App.AFile.find(params.onefile_id);
}
});

还有那些模板:

 <script type="text/x-handlebars" data-template-name="allfiles">
{{#each controller}}
{{#linkTo onefile this}}open{{/linkTo}}
{{/each}}
</script>

<script type="text/x-handlebars" data-template-name="onefile">
{{name}}
</script>

它的工作原理如下:用户打开应用程序,它会显示所有文件模板以及名为“打开”的链接。该链接将打开一个名为 onefile 的模板并将 onefile_id 传递给它。

当我打开应用程序并单击“打开”时,它会工作并显示一个文件的正确名称。 URL 设置为 #/onefile/1,其中 1 是 onefile_id。所以效果很好。

但是当我刷新页面(#/onefile/1)时,名称不再显示。

在返回 id 之前,我已经检查了 onefileRoute 模型函数中发生的情况,并且 App.AFile 定义的所有字段都具有空值。应用程序加载后,这些值将正确填充到 App.AFile 对象中,但不会显示在 View 上。

所以看起来 RestAdapter 在 View 显示后获取数据。

如何让它发挥作用?

最佳答案

App.onefileRoute = Ember.Route.extend({
model : function(params)
{
var m = App.AFile.find(params.onefile_id);
// at this point m might not be resolved, so name could be empty
return m;
},
afterModel: function(model, transition){
// at this point it should be resolved, what happens here?
console.log(model.get('name'));
}
});

我的猜测是您的端点按 ID 返回了错误的模型信息。

关于javascript - 如何让 Ember.js 在显示 View 之前加载 RESTAdapter 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17968915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com