Ember.js搜索模态动词

时间:2013-03-23 10:56:38

标签: javascript html rest ember.js ember-data

教程&我发现的指南建议Ember.js模型非常以数据为中心,因为浏览器中的数据持久存储到服务器和/或模型中充满了来自服务器的数据。

更具动词中心的东西怎么样?例如,我的情况是,到目前为止,我有一个“搜索”模型,其中搜索有查询,状态(“在搜索前”,“在搜索期间”等),并且希望有一些结果。我希望搜索到“runQuery”,它会向服务器发出ajax请求,返回并使用结果填充模型,并将其状态更改为“aftersearch”。

在模型上处理此类动词的最佳方法是什么? “runQuery”应该通过ember-data进行,还是仅使用$ .ajax或类似手动触发?我是否可能以错误的方式思考模型,这应该通过控制器实现?

编辑:在阅读了一些关于REST的内容之后,我认为我想要的是POST到“控制器”资源。所以,例如:

POST:/搜索(创建搜索)

POST:/ searching / 1 / run(执行搜索1的“运行”控制器

Ember.js / ember-data是否有推荐的方式来调用这样的控制器资源?

1 个答案:

答案 0 :(得分:3)

Ember-data非常适合使用包含各种信息字段和关系的模型对象,并由唯一ID定义。我的一半API就像ember-data所期望的那样,有一半像你描述的那样,它更多的是关于数据处理或执行计算而不是创建/检索/更新/删除具有id的数据对象。将这些计算处理为相同并为其分配id并将其保留在数据库中是没有意义的。

在我的情况下,由于我有ember-data风格的数据对象和计算功能,我使用了混合的ember-data和自定义ajax请求。我存储了由ember-data检索的关系数据,但我增加了模型以包括对计算部分的访问。

例如:

App.Event = DS.Model.extend({
  name: DS.attr('string'),
  items: DS.hasMany('App.Item'),
  ...etc...

  searchData: null,
  searchInEvent: function(data) {
    var _this = this;
    return $.ajax({
      url: "/api/events/" + this.get('id') + "/search/",
      dataType: 'json',
      type: 'POST',
      data: data
    }).then(function(result){
      _this.set('searchData', result);
    });
  }
});

App.Event是一个普通的余烬数据模型,由路由器通过通常的ember约定加载,并且由于各种控制器需要访问搜索功能,他们可以通过searchInEvent和{{}获取它{1}}已添加到模型中。