【问题标题】:How to retrieve models from .json file in ember.js如何从 ember.js 中的 .json 文件中检索模型
【发布时间】:2014-01-02 13:18:51
【问题描述】:

以下是我的文件夹结构

Sample/
  css/
  js/
    libs/
    data/
        employees.json
    app.js
  index.html
应用程序.js
App = Ember.Application.create({
  LOG_TRANSITIONS: true
});

App.Router.map(function(){
  this.resource("employees");
});

App.ApplicationAdapter = DS.RESTAdapter.extend({
  namespace: "localapps/EmberProjects/Sample/js/data",
  url: "employees.json"
});

App.Employee = DS.Model.extend({
  name : DS.attr("string")
});

App.EmployeesRoute = Ember.Route.extend({
  model: function() {
    return this.store.find("employee");
  }
});
员工.json
{
  "employees": [
    {
        "name": "Title 1"
    },
    {
        "name": "Title 2"
    }
  ]
}

但是当我尝试从 .json 文件中获取数据时,ember.js 会自动将 url 中的 .json 替换为“”。

原始提取调用:

http://localhost/localapps/EmberProjects/Sample/js/data/employees.json

但是 ember 试图从

获取数据
http://localhost/localapps/EmberProjects/Sample/js/data/employees

所以没有从适配器收到数据。

【问题讨论】:

  • Employees 文件是否会更改?为什么现在不使用夹具适配器加载它?是在浏览器中以file:// 请求的形式运行您的应用程序,还是您有服务器?
  • 我正在从 apache 服务器运行我的应用程序。不,员工档案不会改变。我尝试使用夹具适配器,它正在工作。在 angular js、backbone js 和其他类似框架中,我将从本地 .json 文件文件中获取 json 数据以在连接到生产服务器之前进行测试。我也在尝试在 ember.js 中做同样的事情
  • 你能把employees.json重命名为employees吗?
  • 如果我从员工中删除 .json 扩展名,它就可以工作。但是是否有任何可用的解决方案而不替换 .json 扩展名

标签: javascript json ember.js


【解决方案1】:

@claptimes 解决方案可能会起作用,但它会复制原始实现,我认为这是一种不好的做法,因为您必须手动使其保持最新版本的 ember 数据:)

我还注意到您正在设置 url 属性,该属性已被弃用一段时间 (https://github.com/emberjs/data/blob/eeb6162f65513caa19ce18887c3f4d1c2014d80c/TRANSITION.md#host-and-namespace-configuration)。

这是一个调用 _super 并且不覆盖完整方法的解决方案:

App.ApplicationAdapter = DS.RESTAdapter.extend({
  buildURL: function() {
    return this._super(...arguments) + '.json';
  }
});

【讨论】:

  • pathForType方法不应该返回吗?
  • 很好,我猜我还在用咖啡脚本思考 ;)
  • 奇怪 - 这对我有用,它加载 .json 文件但由于某种原因 ember 无法正确加载它作为模型。如果我将其更改为夹具适配器,则相同的 json 可以工作。有人知道问题可能是什么吗?
  • 可能是任何东西:您确定 Ember 收到了正确的 JSON 吗?任何控制台错误?请使用演示问题的 jsfiddle 开始一个新问题
  • 我认为这不是正确的答案。它构建的 url 看起来像这样:things.json/1
【解决方案2】:

要将.json 结尾添加到您的请求中,您可以覆盖RESTAdapter 中的buildURL 调用。这应该有效:

DS.RESTAdapter = DS.Adapter.reopen({
  buildURL: function(type, id) {
    var url = [],
        host = get(this, 'host'),
        prefix = this.urlPrefix();

    if (type) { url.push(this.pathForType(type)); }
    if (id) { url.push(id); }

    if (prefix) { url.unshift(prefix); }

    url = url.join('/');
    if (!host && url) { url = '/' + url; }

    url += ".json";

    return url;
  }
});

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,但此处提供的所有答案均无效。我认为这取决于 Ember.js 的进一步发展。

    其实我想通了如何使用 RESTAdapter 接收数据。您必须将 ?jsonp=? 添加到 JSON 文件的路径中。

    您的适配器应如下所示:

    App.ApplicationAdapter = DS.RESTAdapter.extend({
      host: "localapps/EmberProjects/Sample/js/data/employees.json?jsonp=?",
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多