【问题标题】:Emberjs template not binding to restful dataEmberjs 模板未绑定到静态数据
【发布时间】:2013-09-07 17:37:34
【问题描述】:

得到这条路线来从一个安静的服务中获取数据

var App = Ember.Application.create({rootElement: '#planner'});
App.Store = DS.Store.extend();
App.Router.map(function(){
    this.resource('home');
});
App.HomeRoute = Ember.Route.extend({
    model: function(){
        return Ember.$.getJSON('/api/get-planner/');
    }
});

和模板:

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

不知何故,名称的值没有显示出来。我可以确认 api 正在返回正确的 json 数据。

【问题讨论】:

  • 查看stackoverflow.com/questions/15608431/… 了解如何正确使用 Ajax 和 Ember。
  • 实际上你的模板应该像你的路线一样命名为 home。
  • 对不起模板名称,是的,它是“家”,我只是复制了错误的。
  • 链接和我在这里读到的很不一样emberjs.com/guides/routing/specifying-a-routes-model我在这里长出了白发,文档糟透了!
  • 文档在这里展示了一个非常基本的方法。更高级的指南将很快合并。使用我链接的方法或提出一个小提琴,我们可以一起努力。

标签: javascript rest templates ember.js binding


【解决方案1】:

Ember-Data 需要这样的 JSON:

{
    planner: {
        name: 'Test'
        // your data
    }
}

所以如果你的 API 返回这个 JSON:

{
    name: 'Test'
}

这行不通。 我建议改用 Ember-Model (https://github.com/ebryn/ember-model),因为它更稳定并且允许您自定义 REST 适配器的行为。

您的代码可能如下所示:

 App.PlannerModel = Ember.Model.extend({
     name: Ember.attr(),
     // see the documentation of ember-model for this
 });

 App.PlannerModel.url = '/api/get-planner/';
 App.PlannerModel.adapter = Ember.RESTAdapter.create();

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

如果您想采用这种方法,请确保不要包含 Ember-Data 并改用 Ember-Model。

【讨论】:

  • 感谢您的回答,我尝试使用它,但不知何故它会将 '.json' 附加到 url 的末尾,我查看了代码似乎无法更改它。
  • 是的,你可以。打开 ember-model.js,将 '.json' 替换为 ''。
  • :/ 那不是很好,因为它破坏了可升级性,而且这不适用于 django rest 框架。
  • ember 和 ember-data 也是如此,对吧?它们仍然是快速移动的目标,我们无法在不破坏现有代码的情况下进行升级。唯一的解决方案是坚持使用正常工作的版本,至少目前是这样。
猜你喜欢
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 2016-05-03
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多