搜索模式动词

Ember.js Search Model Verbs

本文关键字:模式 搜索      更新时间:2023-09-26

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

更以动词为中心的东西怎么样?例如,我的案例是,到目前为止,我有一个"搜索"模型,其中搜索有一个查询,一个状态("beforesearch","duringsearch"等…),并且,希望,一些结果。我希望搜索到"runQuery",它向服务器发出一个ajax请求,它返回并填充模型的结果,并将其状态更改为"aftersearch"。

在模型上处理这些动词的最好方法是什么?"runQuery"应该通过ember-data执行,还是使用$。Ajax还是类似的?我是否以错误的方式考虑模型,这实际上应该通过控制器?

编辑:在阅读了REST之后,我想我想要的是POST到"控制器"资源。例如:

POST:/searches(创建一个搜索)

POST:/searches/1/run(执行search 1的"run"控制器

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

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是一个普通的余烬数据模型,由路由器通过通常的余烬约定加载,由于各种控制器需要访问搜索功能,它们可以通过添加到模型中的searchInEventsearchData访问它。