如何访问Ember Data将要输入的URL?

时间:2014-05-31 13:14:09

标签: ember.js ember-data

我正在调整一个旧的JS(没有框架)+ Rails应用程序作为Ember学习练习。应用程序的想法是我从一些数据输入生成pdf。在初始版本中,没有用户持久性 - 您可以修改表中提供给您的数据,然后下载它的PDF。

作为其中的一部分,我决定运行一个明确的非标准的ember框架 - 我实际上是使用Ember Data来加载表的初始值。 Ember非常适合我在Rails方面的模型,它使得更复杂的计算变得更加容易。我遇到的问题是,我最初的想法是,当我下载PDF时,我会使用二进制数据(带有application / pdf标题)回应Ember Data上的“保存”操作,然后我可以使用某些东西像FileSaver.js一样为客户服务。然后,我发现EmberData需要JSON返回值。

所以我base64编码了我的PDF响应并将其解开..但它不适合模型架构。我以为我会做一个手动AJAX保存 -

CalculateYourTV.RostersShowController = Ember.ObjectController.extend({
  actions:{
    download: function(){
      var roster = this.get("model");
      var team = roster.get('team');
      return this.ajax('*URL GOES HERE*', record.toJSON(), "PUT").then(function(data) {
        console.log('called')
        console.log(data)
      });
    },
  }
})

这就是我目前陷入困境的地方。有没有办法访问EmberData发布到的URL?我可以在Rails方面硬编码路由,但我不喜欢这里的硬编码路由,我想尽可能保持它的可重用性(我计划最终允许数据持久)。 / p>

3 个答案:

答案 0 :(得分:0)

只需打开chrome dev工具(或firebug)并监控网络选项卡中的内容。您应该看到应用程序发出的任何ajax请求,包括EmberData的保存请求。

答案 1 :(得分:0)

您可以通过为每个模型创建自定义Ember数据适配器来更改特定模型将达到的URL。

例如,假设您的person模型不需要点击默认的/persons网址。

App.PersonAdapter = App.ApplicationAdapter.extend({
  pathForType: 'special/custom/endpoint/for/folks'
});

也就是说,Ember Data可能不是您的PDF" model"的最佳工具。对于大多数模型,您始终可以使用Ember数据,但对于其他不符合您的真实模型定义的内容,请使用快速$.ajax

答案 2 :(得分:0)

您可以要求适配器为您构建网址 -

type

其中id是模型的名称,@container.lookup('adapter:application') 是其ID。

如果想直接在容器中查找适配器,那么<​​/ p>

<div class="container">
    <div class="row">
        <div class="people-cards">
            <div class="col-md-6">
                <div class="well">
                    <div class="profile-image">
                        <img src="https://higherlogicdownload.s3.amazonaws.com/MBGH/4f7f512a-e946-4060-9575-b27c65545cb8/UploadedImages/Board%20Photos/SIZE%20150x190/PAMELA%20HANNON%202015.jpg">
                            <div class="card-info">
                     <h3 div class="company">Company Name</h3>

                     <h4 div class="name">Person Name</h4>
                     <h5 div class="title">Job Title</h5>
                    </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
 </div>