我是Ember数据的新手,到目前为止我所做的都是固定数据,但今天我试图从真正的交易中毕业,并意识到我对如何连接模型和API的调用签名还不太了解。
具体来说,我希望能够调用端点GET /activities/[:user_id]/[date]
。这将加载一个“活动”对象数组,但只加载给定日期的对象。我知道我可以用以下方法来抵消API的目录:
DS.RESTAdapter.reopen({
namespace: 'api'
});
在我的例子中,api
前缀是合适的。我想我也应该能够通过设置这样一条路线来解决日期组件:
this.resource('activities', { path: '/activities' }, function() {
this.route('by_date', {path: '/:target_date'});
});
以上只是一个合理的猜测,因为我完全不知道如何将user_id
组件输入到URL签名中。有人能帮忙吗?是否有任何好的教程或基本的Ember数据用例的例子?
还有,因为我知道我会遇到下一个.如何将参数添加到url字符串(也就是获取/foobar?something=value),而将参数添加到URL本身(如上面所示)?
-=-=-=
我已经执行了@intuitivepixel的建议,但仍然有一些问题.
首先,我试图对userId
和dateBy
的值进行硬编码
路由器:
this.resource('activities', { path: '/activities' }, function() {
this.route('by_date', {path: '/:user_id/:by_date'});
});
路由:
App.ActivitiesByDateRoute = Ember.Route.extend({
serialize: function(activity) {
return {
userId: 1,
dateBy: "2013-07-01"
};
}
});
遗憾的是,这是行不通的。我想我理解为什么--尽管我没有一个快速的方法来解决这个问题--但更让我困扰的是,当我手动将参数放入URL:http://restful.service.com/api/activities/1/2013-07-01
中时。这些结果让我感到非常惊讶:
GET /activities
调用,它失败了,因为这个端点需要用户和日期限定符才能工作。为什么这些不包括在请求中?
发布于 2013-08-09 15:04:39
我知道我可以用以下方法来抵消API的目录:
如果是这样的话,还可以设置API的不同URL:
DS.RESTAdapter.reopen({
url: 'http://myapihost.com',
namespace: 'api'
});
这将产生一个类似于http://myapihost.com/api/
的URL
以上只是一个合理的猜测,因为我完全不知道如何将user_id组件输入到URL签名中。
按照您的示例并添加user_id
动态段,假设您具有以下路由器映射定义:
this.resource('activities', { path: '/activities' }, function() {
this.route('byDate', {path: '/:user_id/:target_date'});
});
这是您的{{linkTo}}
助手:
{{#each activity in model}}
{{#linkTo 'activities.byDate' activity}}
{{/each}}
然后,要从多个动态段构建url,可以连接到路由的serialize
函数,并返回一个由您的URL需要的动态段组成的散列:
App.ActivitiesByDateRoute = Ember.Route.extend({
serialize: function(activity) {
return {
user_id: activity.get('userId'),
target_date: activity.get('targetDate')
}
}
});
当单击/activities/[userId]/[targetDate]
链接时,上面的代码将生成类似于{{linkTo}}
的URL。该示例假设您构建URL所需的属性在您的Activity
模型中可用。
还有,因为我知道我会遇到下一个.如何将参数添加到url字符串(也就是获取/foobar?something=value),而将参数添加到URL本身(如上面所示)?
这种URL查询还不受ember框架的支持,但是这些都是很好的解决方法/项目,它们试图处理缺少的特性,比如:https://github.com/alexspeller/ember-query,如果有一天这个按下合并了,那么您也可以在ember中使用它们,但是在将来的时间里,您可以使用上面提到的库来支持自定义查询。对于当前状态,无论库合并与否,请在这里查看:http://discuss.emberjs.com/t/query-string-support-in-ember-router,正在进行讨论。
希望能帮上忙。
https://stackoverflow.com/questions/18156404
复制相似问题