Handlebars 似乎没有调用我的控制器功能

Handlebars doesn't seem to call my controller function

我的控制器上有一个 属性,isLogin,绑定到有条件的把手,{{#unless isLogin}}。但是它似乎并没有在渲染模板时激活该功能。我插入了一个 console.log 语句,但它也没有出现在控制台中。

我有一个这样的申请模板:

<div id="header">
  <div class="screen-line black"></div>
</div>
<div id="content">
  <div class="pure-g">
    <div class="pure-u-1-6">
      {{#unless isLogin}}
        <div class="nav pure-menu custom-restricted-width">
          <ul class="pure-menu-list">
            <li class="pure-menu-item"><div class="menu-item-icon fa fa-trello"></div>{{link-to "Classrooms" "classrooms" class="menu-item pure-menu-link"}}</li>
          </ul>
        </div>
      {{/unless}}
    </div>
    <div class="pure-u-5-6" >
      {{outlet}}
    </div>
  </div>
</div>
<div id="footer">
  <div class="screen-line black"></div>
</div>

还有这样的控制器:

import Ember from 'ember';

export default Ember.Controller.extend({
  isLogin : function(){
    console.log("isLogin called");
    return true;
  }

});

你能看出哪里出了问题吗?谢谢

我认为你的实现方式是错误的。

您应该按以下方式进行 - isLogin 应该是控制器中的一个变量,您可以在任何控制器函数(如 init())中更改此变量的值。如下 -

export default Ember.Controller.extend({
isLogin: false,  
init:function()
    {
        this._super(); 
        this.set('isLogin',true);

    }
});

然后您可以在模板中的 Unless 中使用此变量。 [请注意 - 我在 init 方法中调用 this.super() 只是因为我不想覆盖控制器 init 的任何原始功能。]

也许你应该将 isLogin 变成 属性,如下所示:

// controllers/application.js

import Ember from 'ember';

export default Ember.Controller.extend({

  isLogin: function(){
    console.log("isLogin called");
    return true;
  }.property()

});

(参见 jsbin