2014-02-27 21 views
3

我注意到,當模型實例(對象)傳遞給視圖時,它被剝離了所有函數。有沒有辦法解決?查看訪問模型實例方法(Sails.js/EJS)

例子:

我的用戶模型具有智能合併姓,名,字頭法全名。

在控制器我有:

User.find().done(function(err,users){ 
    res.view({ 
    users:users 
    }); 
}); 

如果我通過控制器I可以做user.fullName用戶環路();

如果我在視圖中做同樣的事情,我得到一個未定義的方法錯誤。

我可以訪問模型在控制器或視圖(例如user.firstName,user.lastName)

在其他MVC架構(例如,軌道/ zendPHP)我通常做這樣的事情在屬性直接模型,並可以在視圖中隨時調用user.fullName(),以便在整個系統中保持DRY和一致。

爲什麼不工作,有沒有辦法讓它工作?

型號

module.exports = { 
    attributes: { 
     email: { 
      type: 'string', 
      required: true, 
      unique: true, 
      email: true 
     }, 
     password: { 
      type: 'string', 
      required: true 
     }, 
     firstName: { 
      type: 'string', 
      required: false, 
      maxLength: 50, 
      minLength: 2 
     }, 
     lastName: { 
      type: 'string', 
      required: false, 
      maxLength: 50, 
      minLength: 2 
     }, 

     // Returns full name of user (or just first/last if that's all we have) 
     getFullName: function(){ 
      return _.str.trim((this.firstName || '') + ' ' + (this.lastName || '')); 
     } 
    } 
} 

查看

<% users.forEach(function(user){ %> 
<tr> 
    <td><%= user.id %></td> 
    <td><%= user.email %></td> 
    <td><%= user.getFullName() %></td> 
    <td><%= user.status %></td> 
    <td><%= user.createdAt %></td> 
    <td> 
    <a href="#<%= user.id %>" class="btn btn-xs icon-edit"></a> 
    <a href="#<%= user.id %>" class="btn btn-xs icon-trash"></a> 
    </td> 
</tr> 
<% }); %> 

我也同時在循環之前試圖在環路和執行console.log(用戶)的console.log(用戶)控制器和視圖,當模型傳遞到視圖時,顯然方法被剝離。我也嘗試過構建方法user.toJSON(),並且在視圖中出現未定義的方法錯誤,但它在控制器中按預期工作。

+0

適用於我。你能發佈你的模型和你的視圖代碼嗎? – marionebl

+0

Plus:您正在使用哪個版本的Sails? – marionebl

+0

v0.10 ...我認爲它與我的模型或視圖代碼沒有任何關係,因爲即使內置的函數toJSON()也不起作用。另外,如果我console.log整個用戶對象的控制器和視圖的getters/setters的關聯也被刪除。 – Lenny

回答

0

它看起來像在使用toJSON之前必須在陣列上運行pop()函數。然後,您將可以訪問視圖中的屬性方法。看看它如何在sails documentation中使用。但是,這當然會刪除陣列中的最後一個元素...

+0

我不是在數組上調用.toJSON,而是在forEach循環中的單個實例上執行它。順便說一下,如果你只需要一個,而你不想修改數組,你可以使用users [0] .toJSON() – Lenny