2014-10-26 14 views
5

Tôi có một vài mã mà tôi chỉ muốn chạy khi có noUser và một số khi có currentUser.
Tất cả những điều này đều nằm trong mẫu điều hướng. Giống như rất ...Meteor cần có thời gian để biết liệu có {{currentUser}} hay không

{{#if currentUser}} 
    <li class="nav"><a href="{{pathFor 'create'}}">Post</a> 
    </li> 
    <li class="nav"><a>Ola, {{thisUser}}!</a> 
    </li> 
    <li class="nav"><a href="#" id="logout">Log Out</a> 
    </li> 
    {{/if}} 

    {{#if noUser}} 
     <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a> 
     </li> 
     <li class="nav"><a href="{{pathFor 'login'}}">Login</a> 
     </li> 
    {{/if}} 

Vì vậy, vấn đề là khi có một currentUser (ví dụ, tôi đã đăng nhập) và tôi làm mới trang, các mã bên trong khối {{#if noUser}} xuất hiện đầu tiên sau đó khối {{#if currentUser}}, trong khi khối {{#if noUser}} chỉ có nghĩa là hiển thị khi không có người dùng.
Dưới đây là mã helper cho mẫu ..

Template.navigation.helpers({ 

    thisUser: function() { 
      return Meteor.user().username; 

    }, 

    noUser: function() { 
     var user = Meteor.user(); 

     if (!user) { 
      return true; 
     }; 
    } 


}); 

Không biết những gì tôi làm sai ở đây. :(
Xin vui lòng giúp.

Trả lời

10

Bạn nên sử dụng nếu điều kiện khác thay vì không có người trợ giúp. Và để ngăn chặn hiển thị "noUser" khối trong khi đăng nhập, bạn phải sử dụng {{ loggingIn }} helper.Điều gì đó như thế này:

{{#if loggingIn}} 
    <p>Loggin in...</p> 
{{else}} 
    {{#if currentUser}} 
    <li class="nav"><a href="{{pathFor 'create'}}">Post</a> 
    </li> 
    <li class="nav"><a>Ola, {{thisUser}}!</a> 
    </li> 
    <li class="nav"><a href="#" id="logout">Log Out</a> 
    </li> 
    {{else}} 
    <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a> 
    </li> 
    <li class="nav"><a href="{{pathFor 'login'}}">Login</a> 
    </li> 
    {{/if}} 
{{/if}} 

Vì Meteor không biết ngay lập tức người dùng có đăng nhập hay không. Vì vậy, bạn phải sử dụng helper loggingIn.

0

Tại sao bạn không refactor code của bạn như thế này?

{{#if currentUser}} 
    <li class="nav"><a href="{{pathFor 'create'}}">Post</a> 
    </li> 
    <li class="nav"><a>Ola, {{thisUser}}!</a> 
    </li> 
    <li class="nav"><a href="#" id="logout">Log Out</a> 
    </li> 
{{else}} 
    <li class="nav"><a href="{{pathFor 'signup'}}">Sign Up</a> 
    </li> 
    <li class="nav"><a href="{{pathFor 'login'}}">Login</a> 
    </li> 
{{/if}} 

Bạn có thể muốn có một cái nhìn để http://docs.meteor.com/#meteor_loggingin để hiển thị một chỉ số tải nếu cần thiết.

Các vấn đề liên quan