2013-03-13 88 views
2

我有这个问题,当我试图显示一个值从引导模式对话框中的集合获取。流星模板呈现在引导模式对话框内

这是客户端的JavaScript代码:

Template.Modal_edit_client.edit_client_name = function() { 
    var c = Clients.findOne({_id: Session.get("current_editing")}); 
    return c.name; 
}; 

,这是模板:

<template name="Modal_edit_client"> 
    <div id="Modal_edit_client" class="modal hide fade"> 
     <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
      <h3>Editar cliente</h3> 
     </div> 
     <div class="modal-body"> 
      <form id="edit_client" action=""> 
       <fieldset> 
        <input id="edit_client_name" placeholder="Nombre y apellido" type="text" value="{{edit_client_name}}"> 
        {{edit_client_name}} 
       </fieldset> 
      </form> 
     </div> 
     <div class="modal-footer"> 
      <a id="edit_client_cancel" href="#" class="btn">Cancelar</a> 
      <a id="edit_client_save" href="#" class="btn btn-primary">Guardar</a> 
     </div> 
    </div> 
</template> 

页没有呈现,这就是显示conosole:

Uncaught TypeError: Cannot read property 'name' of undefined 
Exception from Meteor.flush: TypeError: Cannot call method 'firstNode' of undefined 
    at Object.Spark.renderToRange (http://localhost:3000/packages/spark/spark.js?ba288278f8e36e3529187cea4590001f50ef0f95:545:25) 
    at http://localhost:3000/packages/spark/spark.js?ba288278f8e36e3529187cea4590001f50ef0f95:860:13 
    at http://localhost:3000/packages/deps/deps-utils.js?0c00e493224f891c3d6c82a23693ba55e0f47611:78:31 
    at _.extend.run (http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:19:20) 
    at rerun (http://localhost:3000/packages/deps/deps-utils.js?0c00e493224f891c3d6c82a23693ba55e0f47611:78:11) 
    at http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:71:15 
    at Array.forEach (native) 
    at Function._.each._.forEach (http://localhost:3000/packages/underscore/underscore.js?017a0dea6ebb07eec57a1541a0fd524665e769bd:79:11) 
    at http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:69:13 
    at Array.forEach (native) logging.js:30 
Exception from Meteor.flush: TypeError: Cannot call method 'firstNode' of undefined 
    at Object.Spark.renderToRange (http://localhost:3000/packages/spark/spark.js?ba288278f8e36e3529187cea4590001f50ef0f95:545:25) 
    at http://localhost:3000/packages/spark/spark.js?ba288278f8e36e3529187cea4590001f50ef0f95:860:13 
    at http://localhost:3000/packages/deps/deps-utils.js?0c00e493224f891c3d6c82a23693ba55e0f47611:78:31 
    at _.extend.run (http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:19:20) 
    at rerun (http://localhost:3000/packages/deps/deps-utils.js?0c00e493224f891c3d6c82a23693ba55e0f47611:78:11) 
    at http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:71:15 
    at Array.forEach (native) 
    at Function._.each._.forEach (http://localhost:3000/packages/underscore/underscore.js?017a0dea6ebb07eec57a1541a0fd524665e769bd:79:11) 
    at http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:69:13 
    at Array.forEach (native) logging.js:30 
Exception from Meteor.flush: TypeError: Cannot call method 'firstNode' of undefined 
    at Object.Spark.renderToRange (http://localhost:3000/packages/spark/spark.js?ba288278f8e36e3529187cea4590001f50ef0f95:545:25) 
    at http://localhost:3000/packages/spark/spark.js?ba288278f8e36e3529187cea4590001f50ef0f95:860:13 
    at http://localhost:3000/packages/deps/deps-utils.js?0c00e493224f891c3d6c82a23693ba55e0f47611:78:31 
    at _.extend.run (http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:19:20) 
    at rerun (http://localhost:3000/packages/deps/deps-utils.js?0c00e493224f891c3d6c82a23693ba55e0f47611:78:11) 
    at http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:71:15 
    at Array.forEach (native) 
    at Function._.each._.forEach (http://localhost:3000/packages/underscore/underscore.js?017a0dea6ebb07eec57a1541a0fd524665e769bd:79:11) 
    at http://localhost:3000/packages/deps/deps.js?d804638a4633c2f6488827923ba5fbd00f07d518:69:13 
    at Array.forEach (native) 

我认为问题显示在第一行,Uncaught TypeError: Cannot read property 'name' of undefined。有没有办法等到c.name !== undefined和之后呈现模板?

+0

对于大型的代码之前的记录,[要点](http://gist.github.com)是一个很好的选项 – Prashant 2013-03-14 01:27:12

回答

3

当流星在浏览器中第一次加载时,它没有来自集合中服务器的任何数据,但模板仍然会呈现。就像你的Session没有设置一样。所以,你需要处理的情况下,而它的加载(只是检查是否有试图读取name

Template.Modal_edit_client.edit_client_name = function() { 
    var c = Clients.findOne({_id: Session.get("current_editing")}); 
    if(c) return c.name; 
}; 
+0

谢谢!这真的很有帮助,但我仍然无法看到模板中呈现的值。 – rec 2013-03-14 04:16:33

+0

您是否为“current_editing”设置了会话哈希值,并且它与您的集合中的某个ID相对应?如果运行“客户端”。 findOne({_ id:Session.get(“current_editing”)});'在你的webkit控制台中它是否给你你的文档? – Akshat 2013-03-14 08:47:07

+0

是的!正是我想要的,给了我文档的ID – rec 2013-03-17 00:09:51