Javascript 如何在Ember.js上创建仪表板(在应用程序级别有一个itens计数器)
所以,这不是那么简单的解释,但我有我的余烬应用程序,我的路线,控制器和视图等,它是关于工作列表,这是应用程序最重要的部分,但我也有其他模型,为用户和公司。因此,在Javascript 如何在Ember.js上创建仪表板(在应用程序级别有一个itens计数器),javascript,api,ember.js,Javascript,Api,Ember.js,所以,这不是那么简单的解释,但我有我的余烬应用程序,我的路线,控制器和视图等,它是关于工作列表,这是应用程序最重要的部分,但我也有其他模型,为用户和公司。因此,在ApplicationRoute中,我在这里做这件事: renderTemplate: function() { this.render({ controller: 'jobs' }); } 因为在我的jobs controller上,我需要计算我拥有的列表数量,以显示在每页显示的菜单中,如下所示: 我是通过在作业控制器上执
ApplicationRoute
中,我在这里做这件事:
renderTemplate: function() {
this.render({ controller: 'jobs' });
}
因为在我的jobs controller上,我需要计算我拥有的列表数量,以显示在每页显示的菜单中,如下所示:
我是通过在作业控制器上执行此操作获得此号码的:
jobsCount: function() {
return this.get('model.length');
}.property('@each')
这很好,因为我的主页是作业列表,它调用所有作业的/api/jobs/
。问题发生在我在任何其他页面启动应用程序时,比如直接访问/jobs/:id/
、/admins/
或其他任何页面,计数将为零,因为作业控制器
未加载,并且我无法从api获取作业数(例如,直接访问/api/jobs/:id/
)。访问主页后,将加载广告数量,因为它调用/api/jobs/
,其中包含所有作业。因此,解决方法之一是将应用程序路由
的模型也设置为作业,这导致每次应用程序第一次加载时都有两个请求,这很好,但我不喜欢为了得到一个数字而必须执行两个请求的想法,尤其是当要加载的第一个页面大部分时间是主页时,会导致对同一URL的两个请求(/api/jobs/
)
如果我访问一个作业列表(/jobs/:id/
),强制它加载/api/jobs/
,然后查找id,而不是加载/api/jobs/:id/
,那么这样做是否可以避免两个请求?我应该在API上有一个特定的URL来加载这些数字吗
这个问题清楚吗
谢谢。我也有类似的问题,最终我决定放弃。在您的示例中,这意味着在json中呈现job_计数,该计数由用户进入应用程序时可能调用的所有路由呈现。这使得应用程序的设计有点混乱,但意味着你永远不必打多个电话
但是,如果您的应用程序在用户首次加载应用程序时访问了大量不相关的数据,那么您应该创建一个专门用于加载该数据的url,是的,在初始加载时发出两个请求。就用户体验而言,稍微长一点的初始加载时间是无关紧要的,因为余烬为之后进入的每条路线提供了改进。记住,通过渲染客户端,ember在初始加载时总是比传统的服务器渲染应用程序慢。
恐怕这是必须做出的权衡。我会这样做。在JobsRoute
中,您可以执行以下操作:
App.JobsRoute = Ember.Route.extend({
model: function(params) {
var jobs = this.store.find('job');
jobs.then(function() {
this.store.find('job', params.job_id);
});
}
});
首先,我们将通过调用this.store.find('job')
找到所有作业。这将返回一个承诺,我们将等待它解决并用所有作业填充存储。然后,我们找到了我们特别想要的工作。通过这种方式,只需一个请求即可加载所有作业,作业控制器只代表一个作业。每次用户在主页上启动应用程序时,都可以保留我的解决方案,并在用户从另一个页面启动时执行额外请求?是的,我没有注意到您的应用程序从已经进行呼叫的页面启动。所以是的,只要在其他路线提出额外的要求。但您可能应该继续加载作业模型。由于jobs_count是一个计算属性,您不能直接设置它,否则它将不再是一个计算属性。我尝试过这样做,但我得到了一个未捕获类型错误:无法读取未定义的错误的属性“0”您知道这是哪一行吗?