Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 属性变量更改时未更新成员模板_Javascript_Ember.js - Fatal编程技术网

Javascript 属性变量更改时未更新成员模板

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" }}>

我尝试将class属性绑定到控制器创建的变量,但当变量更改时,模板不会相应地更新

这是我的模板的一个片段:

<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)
}
});