灰烬路径或控制器将数据模型公开为json

时间:2014-06-24 21:19:27

标签: javascript json model-view-controller ember.js

我正在尝试与Ember.js合作 我可以通过路由或控制器将我的数据模型公开为json吗?

我在商店中保存了这样的对象:

this.store.createRecord('Person', {
  id: 1,
  name: this.get('name'),
  email: this.get('email')
});

我想将这些数据从路径或控制器公开为JSON对象。我不想使用任何观点。

可以这样做吗? 谢谢你的帮助

EDIT 我的路线是:

App.ResultRoute = Ember.Route.extend({
model: function() { 
   return this.store.find('person', 1);
   }
});

有' 1'因为我只想要这个记录。 通过这种方式,它可以工作,我在视图中看到Person对象的{{name}}和{{email}。 我想只看到JSON,我试着按照你的建议来做:

App.ResultRoute = Ember.Route.extend({
  afterModel: function (model) {
  model.get('content').forEach(function (item) {
    console.log(item.get('content'));
   });
 } 
});

但我收到此错误: 未捕获错误:断言失败:错误:传递了更多上下文对象,而不是路径的动态细分:错误

我的错误是什么?感谢

2 个答案:

答案 0 :(得分:1)

我这样做的方式是,我会在我的模型中有一个api,它会将一个普通的json对象返回给任何要求它的人。因此Person模型将有一个getPersonDetails方法,它将隐藏所有内部细节,包括属性和关联以及其他任何内容,并返回调用它的person对象的状态。 。 因此,例如,如果您想要显示人员或某事物的表格,您可以执行createRecord,并只询问新创建的person对象的详细信息。

答案 1 :(得分:0)

从本指南的开头部分开始。 http://emberjs.com/guides/routing/specifying-a-routes-model/它将向您展示如何为路线指定模型。

然后,阅读控制器上的整个指南:http://emberjs.com/guides/controllers/

通常,您可以使用以下命令从路径的model挂钩访问该数据:

this.store.find('person') // All records

如果你想以JSON的身份访问第一个对象,你可以这样做:

var person_JSON = this.store.find('person').then(function (persons) {
  //The persons records are now available so you can do whatever you want with them
  console.log(persons.objectAt(0).get('content'));
});

你也可以遍历所有记录并去除内容以生成原始json,而不需要Ember包装......只是取决于你真正需要做什么。

但实际上放置这个的最佳位置是路线的afterModel钩子。你不会做出承诺,因为Ember会为你处理这个:

afterModel: function (model) {
  model.get('content').forEach(function (item) {
    console.log(item.get('content'));
  });
}

希望有所帮助。

编辑:由于您有一条记录,请尝试:

afterModel: function (model) {
  console.log(model.get('content'));
}