如何在 Ember 2 中访问路由模型
How to access a routes model in Ember 2
我在访问模板中的路线模型时遇到了一些问题。作为我的家庭控制器中定义的操作的一部分,我的模型已成功创建:
actions: {
createProject: function () {
var project = this.store.createRecord('project', {
name: 'Sample name'
});
var self = this;
var promise = project.save();
promise.then(function (response) {
self.transitionToRoute('estimate', project);
});
promise.catch(function (errors) {
console.log(errors);
});
}
}
模型的 uuid 被正确序列化到 URL,我的 router.js 中的 URL 如下:
this.route('estimate');
this.route('estimate', { path: '/estimate/:project_id' });
我的estimate
控制器也正确指定了项目依赖:
import Ember from 'ember';
export default Ember.Controller.extend({
needs: ['project']
});
...我在 routes/estimate.js 中定义模型如下:
import Ember from 'ember';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin, {
// model: function(params) {
// return this.store.find('project', params.project_id);
// },
model(params) {
return this.store.findRecord('project', params.project_id);
}
});
记录 this.store.findRecord('project', params.project_id)
的输出,我得到:
Class {__ember1458995391969: null, __ember_meta__: Meta}
__ember1458995391969
...
然而,当我尝试访问估计把手模板中的项目模型(使用 {{model.project.name}}
)时,我什么也没得到(没有错误,没有输出)。
有人对此有什么想法吗?
model hook的return值绑定到controller的model
属性,后者绑定到同名模板中。
你应该写 {{model.name}}
,而不是 {{model.project.name}}
。
背景
您的模型挂钩 return 直接 Ember 数据承诺对象(这是正常的)。这意味着 model
指的是您的项目对象;没有 model.project
属性.
呈现 {{model.project.name}}
就像在您的控制器中调用 this.get('model.project.name')
。 Ember 将为该路径 return undefined
,即使 model.project
本身就是 undefined
:
> $E.get('model')
< Class {store: Class, isLoaded: true, manager: Class, isUpdating: false, __ember1459002119210: "ember610"…}
> $E.get('model.project')
< undefined
> $E.get('model.project.name')
< undefined
> $E.get('model.project.name.whatever')
< undefined
所以在这种情况下没有错误。模板中没有显示任何内容,因为 null
和 undefined
呈现为空白字符串。
我在访问模板中的路线模型时遇到了一些问题。作为我的家庭控制器中定义的操作的一部分,我的模型已成功创建:
actions: {
createProject: function () {
var project = this.store.createRecord('project', {
name: 'Sample name'
});
var self = this;
var promise = project.save();
promise.then(function (response) {
self.transitionToRoute('estimate', project);
});
promise.catch(function (errors) {
console.log(errors);
});
}
}
模型的 uuid 被正确序列化到 URL,我的 router.js 中的 URL 如下:
this.route('estimate');
this.route('estimate', { path: '/estimate/:project_id' });
我的estimate
控制器也正确指定了项目依赖:
import Ember from 'ember';
export default Ember.Controller.extend({
needs: ['project']
});
...我在 routes/estimate.js 中定义模型如下:
import Ember from 'ember';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
export default Ember.Route.extend(AuthenticatedRouteMixin, {
// model: function(params) {
// return this.store.find('project', params.project_id);
// },
model(params) {
return this.store.findRecord('project', params.project_id);
}
});
记录 this.store.findRecord('project', params.project_id)
的输出,我得到:
Class {__ember1458995391969: null, __ember_meta__: Meta}
__ember1458995391969
...
然而,当我尝试访问估计把手模板中的项目模型(使用 {{model.project.name}}
)时,我什么也没得到(没有错误,没有输出)。
有人对此有什么想法吗?
model hook的return值绑定到controller的model
属性,后者绑定到同名模板中。
你应该写 {{model.name}}
,而不是 {{model.project.name}}
。
背景
您的模型挂钩 return 直接 Ember 数据承诺对象(这是正常的)。这意味着 model
指的是您的项目对象;没有 model.project
属性.
呈现 {{model.project.name}}
就像在您的控制器中调用 this.get('model.project.name')
。 Ember 将为该路径 return undefined
,即使 model.project
本身就是 undefined
:
> $E.get('model')
< Class {store: Class, isLoaded: true, manager: Class, isUpdating: false, __ember1459002119210: "ember610"…}
> $E.get('model.project')
< undefined
> $E.get('model.project.name')
< undefined
> $E.get('model.project.name.whatever')
< undefined
所以在这种情况下没有错误。模板中没有显示任何内容,因为 null
和 undefined
呈现为空白字符串。