繁体   English   中英

如何从ember.js中的.json文件检索模型

[英]How to retrieve models from .json file in ember.js

以下是我的文件夹结构

Sample/
  css/
  js/
    libs/
    data/
        employees.json
    app.js
  index.html
app.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"); } }); 
employee.json
 { "employees": [ { "name": "Title 1" }, { "name": "Title 2" } ] } 

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

原始提取调用:

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

但是炭烬试图从中获取数据

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

因此,适配器不会收到任何数据。

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

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

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

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

要添加.json结尾您的要求,您可以覆盖buildURL呼叫RESTAdapter 这应该工作:

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;
  }
});

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

实际上,我知道了如何使用RESTAdapter接收数据。 您必须添加?jsonp=? 到JSON文件的路径。

您的适配器应如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM