Javascript 在Ember JS+;余烬数据
我正在尝试创建一个包含几个动态页面的简单应用程序:索引、关于和联系人。我不想在路由器中硬编码路由;用户无需编辑路由器即可添加页面。我从Ember cli开始 我在网上找到了一个简要介绍此任务的教程:。不幸的是,在使用余烬数据时,我遇到了两个主要问题:Javascript 在Ember JS+;余烬数据,javascript,ember.js,ember-data,ember-cli,Javascript,Ember.js,Ember Data,Ember Cli,我正在尝试创建一个包含几个动态页面的简单应用程序:索引、关于和联系人。我不想在路由器中硬编码路由;用户无需编辑路由器即可添加页面。我从Ember cli开始 我在网上找到了一个简要介绍此任务的教程:。不幸的是,在使用余烬数据时,我遇到了两个主要问题: this.store.find(“page”,params[“page_id]”)返回san阵列,而不是对象。它实际上不是为检索单个对象而设计的 路由上的序列化函数从未被调用 适配器 import DS from 'ember-data'; ex
this.store.find(“page”,params[“page_id]”)代码>返回san阵列,而不是对象。它实际上不是为检索单个对象而设计的
路由
上的序列化
函数从未被调用import DS from 'ember-data';
export default DS.FixtureAdapter.extend({
queryFixtures: function(fixtures, query, type) {
var key = Ember.keys(query)[0];
return fixtures.filterBy(key, query[key]); //This must be an array, not an object.
}
});
模型
路由器
import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend({
location: config.locationType
});
Router.map(function() {
this.resource("page", {"path": "/:page_id"});
});
export default Router;
路线(第页)
模板
{{title}} //Must be wrapped in {{#each}} in order to loop through the array of a single object
我真正做到这一点的唯一方法是将整数id
更改为与URL匹配的字符串。这种方法感觉像是在破坏模型;我认为这不是正确的方法。find()
如果第二个参数是对象,则应始终返回一个数组,然后调用findQuery()
。这并不重要,尽管你可以得到第一个,并在新的承诺中返还:
export default Ember.Route.extend({
model: function(params) {
var query = this.store.find("page", { path: params.page_id });
var promise = new Ember.RSVP.Promise(function(resolve, reject) {
query.then(function(result) {
resolve(result.get('firstObject'));
},
function(err) {
reject(err);
});
});
return promise;
},
});
调用serialize只是为了从模型中获取参数,所以只能在类似
{{link to'page'}
this.store.find(“page”,params[“page_id”])这样的事情上进行代码>不应该返回数组。我的错误。我粘贴了错误的代码片段。this.store.find()
无法通过id
进行搜索。相反,它必须通过一个参数进行搜索,在本例中是path
。我更新了代码片段以反映这一点代码>。我得到以下错误:处理路由时出错:page必须将解析程序函数作为第一个参数传递给承诺构造函数TypeError:必须将解析程序函数作为第一个参数传递给承诺构造函数TypeErrorconstructor@Jason啊,基本上你已经知道了,所以this.store.find(“page”,{path:params.page_id})
将始终返回一个数组,因此您可以返回第一个对象(您一直期望的对象),我已更新了我的答案。@Jason哇,这让我对旧的余烬感到困惑。延迟语法,当动态段占位符为“page\u id”时,请在相关注释中再次检查答案,这是否指示Ember自动查找模型页面
和属性id
?
{{title}} //Must be wrapped in {{#each}} in order to loop through the array of a single object
export default Ember.Route.extend({
model: function(params) {
var query = this.store.find("page", { path: params.page_id });
var promise = new Ember.RSVP.Promise(function(resolve, reject) {
query.then(function(result) {
resolve(result.get('firstObject'));
},
function(err) {
reject(err);
});
});
return promise;
},
});