2016-03-13 113 views
0

我是新來的流星:)流星 - 複選框保持舊值

我有一個模板幫手:

userRoleMap: function() { 
     var u = getUser(); 
     if (u) { 
      var lstRoles = Meteor.roles.find({}).fetch(); 
      var userRoles = u.roles ? u.roles : []; 

      _.map(lstRoles, function(r) { 
       _.extend(r, { 
        userMapped: _.contains(userRoles, r.name) 
       }); 
       return r; 
      }); 

      return lstRoles; 
     } 

     return []; 
    } 

我使用這個幫手我的模板爲:

{{#each userRoleMap}} 
    <div class="checkbox"> 
    <label> 
     <input type="checkbox" class="chkUserRole" value="{{name}}" checked="{{userMapped}}"> {{name}} 
    </label> 
    </div> 
{{/each}} 

我在bootstrap-mode中顯示上面的html/template。我點擊一個按鈕(並在調用getUser()函數時在我使用的Session中設置用戶標識)顯示此模式。

問題是複選框檢查狀態不會根據「userMapped」的值而改變。它是第一次正確設置,但不是事後。幫助程序userRoleMap每次打開模式時都會被調用,但複選框的狀態與之前打開時的狀態相同(手動檢查/取消選中狀態)。

輔助方法的返回值按預期工作(通過將其記錄在控制檯上進行驗證)。

我在這裏失蹤的任何東西?與_.extend()有關嗎?

回答

0

流星的方式來做到這一點是要麼返回檢查作爲元素的屬性或不:

Template.registerHelper('checked', (a, b) => { 
    return a === b ? 'checked' : ''; 
}); 

{{#each userRoleMap}} 
    <div class="checkbox"> 
    <label> 
     <input type="checkbox" class="chkUserRole" value="{{name}}" {{checked userMapped true}}> {{name}} 
    </label> 
    </div> 
{{/each}}