我注意到,當模型實例(對象)傳遞給視圖時,它被剝離了所有函數。有沒有辦法解決?查看訪問模型實例方法(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(),並且在視圖中出現未定義的方法錯誤,但它在控制器中按預期工作。
適用於我。你能發佈你的模型和你的視圖代碼嗎? – marionebl
Plus:您正在使用哪個版本的Sails? – marionebl
v0.10 ...我認爲它與我的模型或視圖代碼沒有任何關係,因爲即使內置的函數toJSON()也不起作用。另外,如果我console.log整個用戶對象的控制器和視圖的getters/setters的關聯也被刪除。 – Lenny