Javascript Ember.js在加载模型后不重新渲染模板

Javascript Ember.js在加载模型后不重新渲染模板,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我正在使用RubyonRails API服务器学习Ember.js。我已经完成了路由、模板和模型的所有设置和工作,但是一旦从API服务器加载数据,模板就永远不会重新呈现。我没有收到任何错误消息,我知道客户正在通过查看Ember inspector加载 客户列表应在开始后显示 正在从API服务器正确加载客户列表: 路由器 // javacripts/router.js App.Router.map(function() { this.resource('customers', { path

我正在使用RubyonRails API服务器学习Ember.js。我已经完成了路由、模板和模型的所有设置和工作,但是一旦从API服务器加载数据,模板就永远不会重新呈现。我没有收到任何错误消息,我知道客户正在通过查看Ember inspector加载

客户列表应在
开始后显示

正在从API服务器正确加载客户列表:

路由器

// javacripts/router.js
App.Router.map(function() {
  this.resource('customers', { path: "/" });
});
客户路线

// javascripts/routes/customer_routes.js
App.CustomersRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('customer');
  },
  renderTemplate: function() {
    this.render('customers/index');
  }
});
// javacripts/templates/customers/index.js.handlebars
<ul>
  <li>start</li>
  {{#each customers}}
    <li>{{name}}</li>
  {{/each}}
</ul>
// javacripts/store.js
App.ApplicationAdapter = DS.ActiveModelAdapter.extend({
  namespace: 'api/v1'
});
客户模型

// javascripts/models/customer.js
App.Customer = DS.Model.extend({
  name: DS.attr('string')
});
客户索引模板

// javascripts/routes/customer_routes.js
App.CustomersRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('customer');
  },
  renderTemplate: function() {
    this.render('customers/index');
  }
});
// javacripts/templates/customers/index.js.handlebars
<ul>
  <li>start</li>
  {{#each customers}}
    <li>{{name}}</li>
  {{/each}}
</ul>
// javacripts/store.js
App.ApplicationAdapter = DS.ActiveModelAdapter.extend({
  namespace: 'api/v1'
});
而不是

{{#each customers}}
它应该是

{{#each controller}}
  {{name}}
{{/each}}

我最近发布了两个屏幕截图。一个演示如何开始使用新应用程序,另一个演示如何设置Grunt:

你也可以从我今年早些时候的一次演讲中得到一些帮助,在演讲期间,我开发了一个简单的应用程序,包括Ember数据


您的客户/索引模板正在引用不存在的“客户”集合

路线的模型挂钩返回一个记录数组,这使Ember生成一个Ember.ArrayController,并将其模型设置为您的客户数组。它没有名为“customers”的属性,因此{{{each customers}}没有任何可迭代的内容。如果将其更改为{{#each}}(因为此范围中的
this
引用了类似于数组的控制器)或{{#each model}(显式访问ArrayController的模型数组),则它应该可以正常工作

此外,路由中的renderTemplate钩子是默认行为,因此您可以删除它


顺便说一句,我建议您在开始学习基础知识时只使用一个或一些东西,这样当您需要寻求帮助时,您可以链接到bin,人们可以使用实时代码来帮助您,只需最少的努力。这种低门槛的进入对那些为互联网积分做免费工作的人来说是一个很大的不同。

有什么东西真的在加载,比如你的应用程序模板文件吗?@ryan-看起来一切都加载得很好。正在渲染
application.js.handlebar
index.js.handlebar
。但是索引中的
{{{each}}
循环总是空的,我想知道您使用的扩展是否奇怪。通常文件只是用
.handlebar
.hbs
扩展的,我从来没有见过
.js.handlebar
@ryan,因为它们使用了Ember&Rails,所以我一直在看文章中的例子。这就是他们命名模板的方式,所以我也这么做了。谢谢你向我解释范围。现在它变得更有意义了。不幸的是,我无法在Ember JSBin上开发此应用程序,因为我的API不公开。如果您是根据已建立的API进行构建,那么请确定。不过,在开发中使用Ember Data的FixtureAdapter或类似于或的API stub Express服务器的情况并不少见。如果您不希望服务器端开发的挂起阻碍您的前端开发(如果您正在协作),那么它会很有帮助。