2015-08-30 45 views
0

我有一個複選框實現,它工作得很好。流星複選框 - 顯示錶達式的值作爲字符串,不解釋爲布爾

HTML:

<form> 
    <ul> 
     {{#each checkbox}} 
     <li> 
      <input type="checkbox" checked="{{checked}}" class="toggle-checked"> {{name}}: {{checked}} 
     </li> 
     {{/each}} 
    </ul> 
</form> 

JS:

Cbtest = new Mongo.Collection('cbtest'); 

Template.checkbox.helpers({ 
    checkbox: function() { 
     return Cbtest.find(); 
    } 
}); 

Template.checkbox.events({ 
    "click .toggle-checked": function() { 
     var self = this; 
     Meteor.call("setChecked", self._id, !self.checked); 
    } 
}); 

Meteor.methods({ 
    setChecked: function (checkboxId, setChecked) { 
     Cbtest.update(checkboxId, { 
      $set: { 
       checked: setChecked 
      } 
     }); 
    } 
}); 

enter image description here

我想要顯示的值取決於複選框的狀態( 「真」 或 「假」)。 現在看來表達式「{{checked}}」被評估爲true或false,如果其爲true,則返回相應文檔條目的值。 我該如何顯示內容爲String(「true」/「false」)?

在此先感謝! Vin的

+0

在流星法中,'CbTest'中有一個錯字。我猜應該是'Cbtest'; – PhilippSpo

+0

謝謝 - 更正:) –

回答

1

您可以添加另一個幫手,使用toString()函數變換checked布爾成字符串:

checkedString: function() { 
    return this.checked.toString(); 
} 

然後在模板中使用這個助手:

<input type="checkbox" checked="{{checked}}" class="toggle-checked"> {{name}}: {{checkedString}} 

看到這個流星pad進行演示。

+0

非常感謝! 還剩下兩個問題: 1.)爲什麼爲表達式{{name}}顯示相應的字符串「one」,但如果使用{{checked}},則其評估方式類似於if語句(所以toString-轉換是必要的)? 2.)一個結構性問題:你爲什麼把Meteor.methods放到服務器文件夾中? - 謝謝:) –

+0

1)顯然這是如何把手工程設計。這裏是一個特定的句柄[任務](http://stackoverflow.com/questions/17664323/handlebars-doesnt-render-boolean-variables-when-false) – PhilippSpo

+0

2)「當你調用這些(方法)函數中的任何一個時客戶端,你調用它們的存根版本來更新本地緩存,並向服務器發送相同的寫入請求「(Meteor [docs](http://docs.meteor.com/#/full/meteor_methods))。由於服務器上沒有對應的方法,因此客戶端方法發送的請求沒有端點。因此,您將在瀏覽器控制檯中收到錯誤「錯誤調用方法'setChecked':Method not found [404]」。另外:「客戶端調用方法定義與同名服務器方法關聯的存根函數」 – PhilippSpo

相關問題