【问题标题】:Ember.js not re-rendering template after Model loaded模型加载后 Ember.js 不重新渲染模板
【发布时间】:2014-07-01 20:52:10
【问题描述】:

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

客户列表应该显示在start之后

正在从 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');
  }
});

客户模型

// javascripts/models/customer.js
App.Customer = DS.Model.extend({
  name: DS.attr('string')
});

客户索引模板

// 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'
});

【问题讨论】:

  • 是否实际加载了任何内容,例如您的应用程序模板文件?
  • @ryan - 看起来一切都加载得很好。 application.js.handlebarsindex.js.handlebars 都在渲染中。但索引中的{{#each}} 循环始终为空
  • 我想知道您使用的扩展名很奇怪。通常文件只是用.handlebars.hbs 扩展我从未真正见过.js.handlebars
  • @ryan 自从他们使用 Ember 和 Rails 以来,我一直在寻找话语中的示例。这就是他们命名模板的方式,所以我也这样做了。 source

标签: javascript ember.js handlebars.js


【解决方案1】:

代替

{{#each customers}}

应该是这样的

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

{{#each customer in controller}}
    {{customer.name}}
{{/each}}

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

您也可以从我今年早些时候的一次演讲中获得一些用处,该演讲通过在演讲中开发一个简单的应用程序,包括 Ember Data。

【讨论】:

    【解决方案2】:

    您的客户/索引模板引用了一个不存在的“客户”集合。

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

    此外,Route 中的 renderTemplate 挂钩是默认行为,因此您可以删除它。

    顺便说一句,我建议您在刚开始学习基础知识时只使用Ember JSBin 或其他东西,所以当您需要寻求帮助时,您可以链接到垃圾箱,人们有实时代码他们可以以最少的努力帮助您。进入门槛低对于那些为互联网点免费工作的人来说有很大的不同。

    【讨论】:

    • 感谢您向我解释范围。现在更有意义了。不幸的是,我无法在 Ember JSBin 上开发此应用程序,因为我的 API 不是公开的
    • 如果您是针对已建立的 API 构建的,那么当然可以。不过,在开发中使用 Ember Data 的 FixtureAdapter 或类似 PretenderEmber-CLI 的 API stub Express 服务器的情况并不少见。如果您不希望服务器端开发挂起阻碍您的前端开发(如果您正在协作),这会很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多