如何在ember中链接到特定的rails API路由和服务器生成的内容?
我有一个混合的Ember / Rails应用程序,在API命名空间中有一个Rails路由来获取任何单个事件并将其转换为.ics
文件以导入到用户的日历中( 这是一个问题 )。 Ember正在使用命令ember server --proxy http://localhost:3000
,它将它连接到Rails服务器进程。
以下片段说明了我的设置:
Rails routes.rb
片段:
namespace :api do # snip resources :events do # snip get 'export_event_ical', on: :member end end
Rails events_controller.rb
片段:
def export_event_ical @event = Event.find(params[:id]) @calendar = Icalendar::Calendar.new ical_event = Icalendar::Event.new ical_event.dtstart = @event.start.strftime("%Y%m%dT%H%M%S") ical_event.dtend = @event.start.strftime("%Y%m%dT%H%M%S") ical_event.summary = @event.body.truncate(50) ical_event.description = @event.body # event.location = @event.location @calendar.add_event ical_event @calendar.publish headers['Content-Type'] = "text/calendar; charset=UTF-8" render :text => @calendar.to_ical end
因此,例如,在我的Ember / Handlebars索引模板中,如果我有一个引用单个事件的event
参数,我可以使用Export to iCal
以达到Rails提供的API路由(即,在端口4200上跳过Ember并在3000处与Rails交谈)。
到现在为止还挺好。 但是我如何将它变成一个动态的Ember控制链接,通过Ember路由到Rails?
我尝试过一些不起作用的东西:
-
添加路由到Ember
events
资源(router.js
):this.resource('events', function() { this.route('show', {path: ':event_id'}); this.route('export_to_ical', { path: '/api/events/:event_id/export_event_ical' }); });
-
将一些goofball jQuery添加到
events.js
路由作为按钮操作并在我的模板中使用:
从’余烬’importEmber;
export default Ember.Route.extend({ actions: { exportToICal: function(eventID) { $.get('/api/events/' + eventID + '/export_event_ical', function(){ alert('Got here.'); }); } } });
-
阅读一些文档:
- http://guides.emberjs.com/v1.10.0/components/sending-actions-from-components-to-your-application
- EmberJS – 如何使用linkTo动态生成链接?
你怎么在Ember做这件事?
在我的应用程序中,我使用环境来声明服务器端点,类似于rails,位于底部:
/* jshint node: true */ 'use strict'; var extend = require('util')._extend; module.exports = function(environment, appConfig) { var ENV = extend(appConfig, { EmberENV: { FEATURES: { // Here you can enable experimental features on an ember canary build // eg 'with-controller': true } }, APP: { // Here you can pass flags/options to your application instance // when it is created }, }); if (environment === 'development') { ENV.serverHost = 'http://localhost:3000'; } return ENV; };
然后你可以像这样获取值
var config = this.container.lookup('config:environment'); var url = config.serverHost + "/...";
- 关于emberjs中命名约定的困惑
- Ember Data属于协会(JSON格式?)
- 使用qunit测试emberjs / rails / devise应用程序时“无法validationCSRF令牌真实性”
- Rails:不是ember,不是JS响应,而是介于两者之间
- Ember中父/子关系出错
- Rails RoutingError(没有路由匹配
- 如何使用ember-rails gem为HandlebarsJS模板指定备用目录?
- 具有嵌入式ID和侧载的Ember-Data和Active Model Serializer的has_many配置
- 如何使用Ember Data&Rails在单个Ember.js表单中保留hasMany关联?