是否可以更改Ember路线中的属性?

时间:2015-10-17 17:36:39

标签: javascript ember.js

在Ember路线上设置属性的正确方法是什么?我有一个标题消息,我​​希望在页面加载时显示,然后我想在用户与页面交互时更改该标题。

import Ember from 'ember';

export default Ember.Route.extend({
  title: "Welcome!",

  model(thing1) {
    return Ember.RSVP.hash({
      thing1: this.store.findRecord('thing1', thing1.thing_id),
      thing2: this.store.findAll('thing2'),
      thing3: this.store.findAll('thing3')
    });
  },

  actions: {
    changeTitle() {
      this.set("title", "I changed!")
    }
  }
});

在我的模板中,我加载另一个组件并传入title

的值
{{title-tile title=title}}

在我的组件标题中,我打印出(理论上)标题:

{{title}}

我还尝试删除中间步骤并直接打印出标题,但这不起作用。

在控制台中我没有错误,否则我能够从RSVP哈希打印出模型数据。没有(明显的)文档。所有文档都侧重于打印模型属性。

我错过了什么?

修改

在我看来,路由只是为了处理模型而且组件应该处理其他所有事情。

我实际上已尝试明确调用要在路由加载时设置的标题,但它仍无法正常工作。

...
init() {
  title: "Welcome!"
}
...

1 个答案:

答案 0 :(得分:1)

您可以在传递给模板的哈希中使用计算属性:

export default Ember.Route.extend({
  title: 'Welcome!',

  model(thing1) {
    return Ember.RSVP.hash({
      // ... omitted for brevity
      title: Ember.computed(() => this.get('title')) // computed property
    });
  },

  actions: {
    changeTitle() {
      this.set("title", "I changed!")
      this.refresh(); // it is required to refresh model
    }
  }
});