我定义了一个组件如下:
export default Ember.Component.extend({
classNameBindings: ['isCategory'],
didInsertElement: function() {
Ember.addObserver(Discourse, 'currentPath', this.routeChanged);
},
routeChanged: function(){
var route = Discourse.get('currentPath');
if (route == 'discovery.top') {
this.set('path', '/top');
this.set('label', 'top');
} else if (route == 'discovery.categories'){
this.set('path', '/categories');
this.set('label', 'Categories');
} else {
this.set('path', '/latest');
this.set('label', 'Latest');
}
},
render: function(buffer) {
this.routeChanged();
buffer.push('<a href="' + this.get('path') + '">' + this.get('label') + '</a>');
}
});
逻辑(虽然不漂亮)按预期工作,但是我不知道如何告诉 Ember 在path
或的值label
发生变化时重新渲染组件 - 我已经尝试.observes()
在渲染函数上使用,以及尝试调用this.rerender()
但是这个不起作用。
谢谢
编辑:
是的,当然我不应该手动渲染。
我现在有一个简单的模板:
<a href="{{path}}">{{label}}</a>
由该组件支持:
export default Ember.Component.extend({
classNameBindings: ['isCategory'],
templateName: "components/memory-nav",
didInsertElement: function() {
Ember.addObserver(Discourse, 'currentPath', this.routeChanged);
}.on('init'),
routeChanged: function(){
var route = Discourse.get('currentPath');
if (route == 'discovery.top') {
Ember.Logger.log("Top");
this.set('path', '/top');
this.set('label', 'Top');
} else if (route == 'discovery.categories'){
Ember.Logger.log("Cateogries");
this.set('path', '/categories');
this.set('label', 'Categories');
} else {
Ember.Logger.log("Latest");
this.set('path', '/latest');
this.set('label', 'Latest');
}
}.on('init')
});
这现在有效,并且在路径更改时正确调用了日志。我.set
原以为调用对象会自动更新模板,但是目前没有更新。我错过了什么?