Javascript EmberJS-如何在从子控制器更新属性后刷新应用程序模板?
我有一个Javascript EmberJS-如何在从子控制器更新属性后刷新应用程序模板?,javascript,ember.js,Javascript,Ember.js,我有一个应用程序控制器和一个登录控制器。调用LoginController.login()操作时,也会触发ApplicationController.login()。“登录”模板被更新,其中“应用程序”模板仍然显示“尚未登录”,保持初始设置。如何更新/触发应用程序模板以显示“已登录!” 模板: <script type="text/x-handlebars"> <p> {{#if isLogin}} Logged in!
应用程序控制器
和一个登录控制器
。调用LoginController.login()
操作时,也会触发ApplicationController.login()
。“登录”模板被更新,其中“应用程序”模板仍然显示“尚未登录”,保持初始设置。如何更新/触发应用程序模板以显示“已登录!”
模板:
<script type="text/x-handlebars">
<p>
{{#if isLogin}}
Logged in!
{{else}}
Not logged in, yet
{{/if}}
</p>
<p>{{outlet}}</p>
</script>
<script type="text/x-handlebars" id="login">
<h1>LoginController</h1>
<p>
{{#if isLogin}}
Logged in! <button {{action 'logout'}} class="btn btn-primary">Logout</button>
{{else}}
Not logged in, yet <button {{action 'login'}} class="btn btn-primary">Login</button>
{{/if}}
</p>
</script>
是一个干货箱吗
App.ApplicationController = Ember.ObjectController.extend({
isLogin : false,
actions: {
login: function() {
this.set('isLogin', true);
},
logout: function() {
this.set('isLogin', false);
}
}
});
App.LoginController = Ember.ObjectController.extend({
needs: ["application"],
isLogin : false,
actions: {
login: function() {
this.set('isLogin', true);
this.get('controllers.application').send('login');
},
logout: function() {
this.set('isLogin', false);
this.get('controllers.application').send('logout');
}
}
});
原始响应
是一个正在工作的jsbin
App.ApplicationController = Ember.ObjectController.extend({
isLogin : false,
actions: {
login: function() {
this.set('isLogin', true);
},
logout: function() {
this.set('isLogin', false);
}
}
});
App.LoginController = Ember.ObjectController.extend({
needs: ["application"],
isLogin : false,
actions: {
login: function() {
this.set('isLogin', true);
this.get('controllers.application').send('login');
},
logout: function() {
this.set('isLogin', false);
this.get('controllers.application').send('logout');
}
}
});
你不能在App.LoginController中使用以下类似的东西来删除代码吗?{{action'auth''login'}}带有以下操作:{auth:function(method){this.toggleProperty('isLogin');this.get('controllers.application').send(method);}}}Duncan是对的,此代码需要简化-我这样做不是为了模拟原始代码。例如,没有理由有两个isLogin属性。它可以驻留在ApplicationController中,LoginController可以在那里设置它,也可以按照Duncan的建议使用操作处理程序设置它。