0

我在访问模板中的路线模型时遇到了一些问题。我的模型作为我的家庭控制器中定义的操作的一部分成功创建:

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}})时,我什么也没得到(没有错误,没有输出)。

有人对此有任何想法吗?

4

1 回答 1

1

模型钩子的返回值绑定到model控制器的属性上,该属性绑定到同名的模板中。

你应该写{{model.name}},不是{{model.project.name}}

背景

您的模型挂钩直接返回一个 Ember Data 承诺对象(这是正常的)。这意味着model指的是您的项目对象;没有model.project财产。

渲染{{model.project.name}}就像调用this.get('model.project.name')你的控制器。Ember 将返回undefined此路径,即使model.projectisundefined本身:

> $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

所以在这种情况下没有错误。模板中没有显示任何内容,因为nullundefined被呈现为空白字符串。

于 2016-03-26T14:20:00.333 回答