2014-11-22 55 views
0

我一直在努力獲取用戶配置文件以顯示特定用戶一段時間,現在我已經相當成功。我在標題中出現錯誤時遇到問題。模板助手中的異常:無法讀取未定義的屬性'名稱'

我發佈一個學校收集這樣

Meteor.publish("schoolData", function() { 
    return Schools.find(); 
}); 

我的訂閱看起來像這樣

Meteor.subscribe('schoolData'); 

我的HTML看起來像這樣

<template name="userProfile"> 
    <title>My Profile</title> 
    <table> 
      <tr> 
       <td>User Name: </td> 
      <td>{{userName}}</td> 
     </tr> 
     <tr> 
      <td>First Name: </td> 
      <td>{{firstName}}</td> 
     </tr> 
     <tr> 
      <td>Last Name: </td> 
      <td>{{lastName}}</td> 
     </tr> 
     <tr> 
      <td>Registered E-mail: </td> 
      <td>{{email}}</td> 
     </tr> 
     <tr> 
      <td>Contact E-mail: </td> 
      <td>{{email}}</td> 
     </tr> 
     <tr> 
      <td>Phone Number: </td> 
      <td>{{phoneNumber}}</td> 
     </tr> 
     <tr> 
      <td>School: </td> 
      <td>{{schoolName}}</td> 
     </tr> 
     <tr> 
      <td>First year: </td> 
      <td>{{firstSchoolYear}}</td> 
     </tr> 
     <tr> 
      <td>Last year: </td> 
      <td>{{lastSchoolYear}}</td> 
     </tr> 
     <tr> 
      <td>Matriculated? </td> 
      <td>{{matriculated}}</td> 
     </tr> 
     <tr> 
      <td>House Name: </td> 
      <td>{{houseName}}</td> 
     </tr> 
     <tr> 
      <td>Country living in: </td> 
      <td>{{country}}</td> 
     </tr> 
     <tr> 
      <td>City living in: </td> 
      <td>{{cityOfResidence}}</td> 
     </tr> 
     <tr> 
      <td>Industry employed in: </td> 
      <td>{{emplIndustry}}</td> 
     </tr> 
    </table> 
</template> 

和JavaScript看起來像這樣

Template.userProfile.helpers({ 
    email: function() {return Meteor.user().emails[0].address}, 
    userName: function() {return Meteor.user().username}, 
    firstName: function() {return Meteor.user().profile.firstname}, 
    lastName: function() {return Meteor.user().profile.lastname}, 
    phoneNumber: function() {return Meteor.user().profile.phone}, 
    schoolName: function() {return  Schools.findOne(Meteor.user().profile.schoolName).name;}, 
    firstSchoolYear: function() {return Meteor.user().profile.firstschoolyear}, 
    lastSchoolYear: function() {return Meteor.user().profile.lastschoolyear}, 
    matriculated: function() {return Meteor.user().profile.matriculated}, 
    houseName: function() {return Meteor.user().profile.housename}, 
    country: function() {return Meteor.user().profile.country}, 
    cityOfResidence: function() {return Meteor.user().profile.cityofresidence}, 
    emplIndustry: function() {return Meteor.user().profile.emplindustry}, 
    signedUp: function() {return Meteor.user().profile.createdAt}, 
}); 

我似乎得到了錯誤 在模板助手中的異常:TypeError:無法讀取未定義的屬性'名稱' 它是mese這是來自Schools集合。 有人可以幫我發現我的錯誤,請。

回答

1

首先,有更好的方法做你想做的achieve-包裝所有的HTML與{{#with用戶}}標籤是這樣的:

<template name="userProfile"> 
    {{#with user}} 
    <title>My Profile</title> 
    <table> 
      <tr> 
       <td>User Name: </td> 
      <td>{{userName}}</td> 
     </tr> 
     <tr> 
      <td>First Name: </td> 
      <td>{{firstName}}</td> 
     </tr> 
     <tr> 
      <td>Last Name: </td> 
      <td>{{lastName}}</td> 
     </tr> 
     <tr> 
      <td>Registered E-mail: </td> 
      <td>{{email}}</td> 
     </tr> 
     <tr> 
      <td>Contact E-mail: </td> 
      <td>{{email}}</td> 
     </tr> 
     <tr> 
      <td>Phone Number: </td> 
      <td>{{phoneNumber}}</td> 
     </tr> 
     <tr> 
      <td>School: </td> 
      <td>{{schoolName}}</td> 
     </tr> 
     <tr> 
      <td>First year: </td> 
      <td>{{firstSchoolYear}}</td> 
     </tr> 
     <tr> 
      <td>Last year: </td> 
      <td>{{lastSchoolYear}}</td> 
     </tr> 
     <tr> 
      <td>Matriculated? </td> 
      <td>{{matriculated}}</td> 
     </tr> 
     <tr> 
      <td>House Name: </td> 
      <td>{{houseName}}</td> 
     </tr> 
     <tr> 
      <td>Country living in: </td> 
      <td>{{country}}</td> 
     </tr> 
     <tr> 
      <td>City living in: </td> 
      <td>{{cityOfResidence}}</td> 
     </tr> 
     <tr> 
      <td>Industry employed in: </td> 
      <td>{{emplIndustry}}</td> 
     </tr> 
    </table> 
{{/with}} 
</template> 

和幫助,如:

user: function(){return Meteor.users.findOne({_id:Meteor.userId()}); 

現在你可以在HTML中使用的所有數據從用戶採集沒有幫手

而且你的問題 - 你做你的查詢錯了,應該是這樣的:

schoolName: function() { 
    return Schools.findOne({name:Meteor.user().profile.schoolName}).name; 
}, 

我以爲你想name檢查學校,如果你在profile.schoolName變化name_id

+0

喜有它_id,謝謝你的回答, 如你所說我已經修改了代碼但我仍然未定義爲錯誤。 我從瀏覽器的控制檯運行查詢,並得到這個迴應 Schools.findOne((name:Meteor.user()。profile.schoolName.name}); undefined 您是否認爲這可能是一個權限問題? – LanceHaig 2014-11-22 17:19:02

+0

我也試過這個查詢。使用.name並返回整個對象。 Schools.findOne({_ id:Meteor.user()。profile.schoolName}); Object {_id:「HGNzCYGszPGcG2Aab」,name:「High School For Boys」} – LanceHaig 2014-11-22 17:25:49

+0

然後這一秒應該在最後使用.name。如果你保存在profile.schoolName「HGNzCYGszPGcG2Aab」中,那麼你應該將它與ID相比較,如果你有「高中男生」,那麼你應該把它與名稱查詢 – Sindis 2014-11-22 17:44:42

相關問題