Javascript 属性变量更改时未更新成员模板
我尝试将class属性绑定到控制器创建的变量,但当变量更改时,模板不会相应地更新 这是我的模板的一个片段:Javascript 属性变量更改时未更新成员模板,javascript,ember.js,Javascript,Ember.js,我尝试将class属性绑定到控制器创建的变量,但当变量更改时,模板不会相应地更新 这是我的模板的一个片段: <div class="collapse navbar-collapse navbar-ex1-collapse"> <ul class="nav navbar-nav navbar-right"> <li {{bind-attr class="loggedIn:show:hide :dropdown" }}>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav navbar-right">
<li {{bind-attr class="loggedIn:show:hide :dropdown" }}>
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user fa-lg"></i></a>
<ul class="dropdown-menu">
<li>{{#link-to 'profile'}}Profile{{/link-to}}</li>
<li><a href="#">Log out</a></li>
</ul>
</li>
我有一个用于signin的控制器,它将在Auth内触发activateProfile操作,从而更改变量并显示,但不知怎的,它没有按预期工作
这是我的签到管理员
App.SigninController = Ember.Controller.extend({
needs:"Auth",
actions: {
userQuery: function() {
//this will be replace with call to the server
this.get('controllers.Auth').send('activateProfile', true);
}
}
});
路线:
this.resource('auth',function(){
this.resource('profile');
this.resource('signin');
this.resource('signup');
});
我尝试登录console和ember属性,loggedIn变量确实得到了更改,但是没有出现。我这样做是否足够,如果你有更好的建议,请教我
谢谢我在回答我自己的问题,以防有人有同样的问题。 我没有使用Auth资源,而是将逻辑移到IndexController,并在IndexController中声明loggedIn。 我注意到一件事,如果您使用控制器A更改/操作控制器B的变量,您可能可以修改其内容,但控制器B的模板不知道并不能正确更新 为了解决这个问题,您必须使用observer或compute作为别名。 正如我所提到的,我将变量移到了IndexController,因为整个应用程序都应该知道用户状态,而不仅仅是身份验证模块,这样做更有意义 下面是我如何修复它的
App.IndexController = Ember.Controller.extend({
loggedIn: false,
actions:{
loggedOut : function(){
this.set('loggedIn', false);
this.transitionToRoute('Index');
}
}
});
App.SigninController = Ember.Controller.extend({
needs: ['Index'],
isLoggingIn : Ember.computed.alias("controllers.Index.loggedIn"),
actions: {
userQuery: function() {
this.set('isLoggingIn',true)
}
});
当然,我将Auth的模板移动为索引,但我不需要更改名称,只需要这样做
希望有帮助 模板文件的名称是什么?我将它们保存为.hbs。这是模板文件夹的层次结构~/ember\u login/public$ls templates/application.hbs profile.hbs signup.hbs auth.hbs signin.hbs。。。。。。每个模块都有自己的文件我猜你认为你在使用AuthController,但实际上你使用的是另一个。使用Ember调试器,查看视图层次结构,查看正在使用的控制器。我不认为是这种情况,因为我在Auth as初始化中手动将其设置为true。一切都很好。使用ember调试器时我注意到的是,最初获取的属性为false。当事件发生时,控制器中的变量被设置为true I log,并且为true,但是模板中的变量没有得到更新。有什么想法吗?虽然这没有帮助,但我在这里面临着同样的问题。我甚至尝试在属性中包装loggedIn,并在视图中使用它:isChecked:false,checkedValue:function{return isChecked;}.property'isChecked',但这不起作用。从操作调用this.set时,该值确实已更新,但模板未更新
App.IndexController = Ember.Controller.extend({
loggedIn: false,
actions:{
loggedOut : function(){
this.set('loggedIn', false);
this.transitionToRoute('Index');
}
}
});
App.SigninController = Ember.Controller.extend({
needs: ['Index'],
isLoggingIn : Ember.computed.alias("controllers.Index.loggedIn"),
actions: {
userQuery: function() {
this.set('isLoggingIn',true)
}
});