[英]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.