【问题标题】:can't display models from ember-data无法显示来自 ember-data 的模型
【发布时间】:2013-03-16 12:06:54
【问题描述】:

我正在使用 Ember.js 1.0.0 RC1 和 ember-data 修订版 12

我有 PHP Slim 框架和 Ember.js 作为 UI。我想从 REST 后端加载数据并在模板中列出。

这是我的代码:

 window.App = Ember.Application.create();

// Store
App.Store = DS.Store.extend({
    revision: 12,
});

// Adaper
DS.RESTAdapter.reopen({
  url: '/slim'
});

// Router
App.Router = Ember.Router.extend();
App.Router.map(function(){
    this.route('ads', {path: '/ads'});
});

// Ad model
App.Ad = DS.Model.extend({
    title: DS.attr('string')
});

// AdsRoute
App.AdsRoute = Ember.Route.extend({
    model: function(){
        return App.Ad.find();
    }
});

现在我尝试在我的模板中从商店渲染我的模型:

<script type="text/x-handlebars" data-template-name="ads">
<h1>Ads</h1>
{{#each controller}}
    {{title}}
{{/each}}
</script>

来自后端的响应:

{ads:[{title:"Title" },{ title:"other title" }]}

但没有显示来自商店的任何内容。我的问题是我应该如何在我的车把模板中使用来自控制器的数据?

感谢阅读!

解决方案

我必须在 JSON 响应周围添加引号

{"ads":[{ "title":"Title" },{ "title":"other title" }]}

【问题讨论】:

  • 这是一个难以捕捉的错误,因为控制台中没有错误消息。非常感谢。在 JSON 周围添加引号解决了它!

标签: javascript ember.js ember-data


【解决方案1】:

看起来好像内容从未在控制器中设置。 我怀疑如果您将 setupController 挂钩添加到您的 App.AdsRoute 它会将项目放入控制器中。

setupController: (controller, model) ->
        controller.set('content', model)

我正在包含我当前正在使用的修订版 11 应用程序的实际工作代码。所以模型名称不会排列,但代码是有效的。

App.ChecksIndexController = Ember.ArrayController.extend
  content: []

App.ChecksIndexRoute = Ember.Route.extend
  enter: ->
    console?.log("Checks Index Route a")
  model: ->
    App.Check.find()
  setupController: (controller, model) ->
    @._super()
    console?.log('route setupController')
    console?.log(model)
    controller.set('content', model)


{{#each item in controller }}
        {{#linkTo checks.show item }}
          <div class="well well-small well-trim-border">
            <h4>{{item.description}}</h5>
          </div>
        {{/linkTo}}
      {{/each}}

我要返回的模型 - 包括一个 ID。

{"checks":[{"id":"512e0c6b1769d0805700000b","description":"xyz"}]}

【讨论】:

  • 感谢@nrion 的快速回答。根据文档 setupController 将“内容”设置为自动建模,除非被覆盖。尽管如此,我还是像你说的那样更改了代码。不幸的是它不起作用:(我很确定这是由于修订版 12 造成的。RC1 对 11 很好,但 12 不起作用!是否有任何关于 ember-data 的文档?API 或其他东西?
  • 如果直接在 setupController 挂钩中调用 controller.set('content', App.Ad.find() ) 会发生什么?我知道这不是您在生产中想要的方式,而是解决问题?我还没有尝试使用第 12 版,所以这可能是问题的一部分。
  • 再次感谢您的时间,nrion。当我这样做时,什么都没有改变。当我尝试打印内容时,我得到:“”。并且 App.Ad.find().get('length') 为 0。但这可能是因为它的异步且尚未填充。我会尝试在 isLoaded 上执行此操作
  • 另外,您可能希望创建一个带有content: [] 属性集的App.AdsController = Em.ArrayController.extend
  • 现在我很确定我的商店是空的。不知道为什么,寿'。如果您能给我发送修订版 11,我将不胜感激!
【解决方案2】:

要尝试的一件事是在模板中输出一个小写的“标题”,因为您的模型将属性定义为以小写的“t”开头。

【讨论】:

  • 感谢您的回答米哈尔。我承认我的模板不够清楚。我只想为我的收藏中的每个项目打印任何内容。我编辑了代码来表达我的目标。
猜你喜欢
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 2019-11-04
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多