Ember-Data:向AJAX请求添加服务器查询

Gra*_*pho 3 ember.js ember-data

我在使用Ember-Data的特定案例时遇到问题.

通常,Ember期望模型类,路径,ajax请求和返回的JSON都遵循类似的模式.

RESTAdapter尝试自动构建一个URL以发送到服务器,这在某些情况下是可以的,但是我需要完全控制我的一些请求URL,特别是在添加其他参数或将API与路由匹配时一个完全不同的URL结构.

可悲的是,Ember没有这方面的指南,尽管我确实找到了关于这个的东西 buildURL method

虽然我不想破坏ember数据只是为了修复一些用例,但我对源代码的根本不足以找出底层发生了什么.

  • 我已将RESTAdapter的命名空间设置为 api/rest
  • 我想填充的模型和资源是 view-debtors
  • 我想要达到的具体服务是 debtor/list
  • 例如,我还需要为分页传递额外的参数?page_size=10&page_number=1.

我完全迷失了怎么做.我无法改变API结构......根据它们的服务太多了.


一些小进展

我继续使用我目前的知识来更接近解决方案.

  • 我创建了一个模型,称之为"列表"
  • 我扩展RESTAdapter为"list"将命名空间更改为"api/rest/debtor"
  • 我改变了"view-debtors"路线的模型钩子 store.find('list')

现在的结果是AJAX调用几乎是正确的......我只需要将这些额外的参数添加到服务器查询中.

这就是我现在所处的位置......我可以通过模型钩子添加这些服务器查询吗?或者我可以通过ember动作控制服务器查询以获取新的AJAX请求吗?

退后一点.到目前为止我的方法是一个好习惯吗?因为我正在使用路由的模型钩子,要将模型设置为列表,这是否仅在直接键入路径URL时才有效?

这么多问题:p

Kin*_*n2k 6

您可以通过查询找到,它将使用提供的对象将查询字符串附加到请求的末尾.

// this would produce /api/rest/debtor/lists?page_size=1&page_number=10
this.store.find('list', {page_size:1, page_number:10});
Run Code Online (Sandbox Code Playgroud)

就个人而言,我认为嘲弄模型名称和命名空间使其适合你的后端网址结构有点蠢.这实际上取决于你想要做什么.如果你想要使用Ember-Data的CRUD的所有完整功能来获取这个特定的数据列表,那么你将会左右攻击终点.Ember Data是否真的对您有所帮助是值得怀疑的.如果您只是在读取数据,我只需使用jquery获取数据并将其加载到Ember Data中.

var store = this.store;
$.getJSON('/api/rest/debtor/lists?page_size=1&page_number=10').then(function(json){
  //fix payload up if necessary http://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload
  store.pushPayload('type', json);
}).then(function(){
  return store.all('type'); // or store.filter('type') if you want to filter what is returned to the model hook
});
Run Code Online (Sandbox Code Playgroud)

pushPayload文档