我希望为每个设置为text的页面设置一个变量,以显示为动态标题。如何在路径中设置变量并将其显示在相应的模板中?到目前为止,我所尝试的一切都没有用。
答案 0 :(得分:2)
路径中模板的上下文是其控制器,而不是其路径。尝试将动作移动到控制器。
请参阅更新的旋律:https://ember-twiddle.com/b454e10355ae8c708c3b8dc24b51e44e?openFiles=controllers.my-route.js%2C
答案 1 :(得分:1)
您只能使用model
挂钩将路径变量传递给模板。但是,model
只被调用一次。要更新路径变量并在模板中查看其最终值,您需要换行变量。之后,您需要更新包装内的变量,并且不会更改包装的referance。你的代码就像:
<强> route.js:强>
model(){
this._super(...arguments);
this.set('myWrappedVariable', {myVariable: 1});
let modelResult = {myWrappedVariable: this.get('myWrappedVariable')};
return modelResult;
},
actions:{
increaseVariables(){
Ember.set(this.get('myWrappedVariable'), 'myVariable', this.get('myWrappedVariable.myVariable')+1);
}
}
<强> template.hbs 强>
myWrappedVariable: {{model.myWrappedVariable.myVariable}}
答案 2 :(得分:0)
@Gaurav的答案是完全正确的,应被视为最佳实践。但是,如果您有充分的理由在Route中设置变量而不是模型,则可以使用setupController
钩子:
import Route from '@ember/routing/route';
export default Route.extend({
setupController(controller, model) {
// Call _super for default behavior
this._super(controller, model);
// Set a variable on controller
controller.set('foo', 'bar');
}
});
如api文档中所示,您也可以使用setupController
通过使用controllerFor
方法获取变量的实例来在另一个控制器上设置变量。但是,我不认为这是一个好习惯,因为如果整个应用程序中没有对其进行很好的记录,则很难维护此类代码。
如@Ahmet EmreKılınç的回答所示,您还可以使用哈希作为模型。如果它的至少一个属性是Promise,则应返回一个RSVP.hash()
。否则,model
hook会在实现承诺之前不会阻止过渡。