我注意到当一个模型实例(对象)传递给一个视图时,它被剥夺了所有函数。有没有办法解决这个问题?
示例:
我的用户模型有方法fullName,智能地合并名字,姓氏和前缀。
在控制器中我有:
User.find().done(function(err,users){
res.view({
users:users
});
});
如果我遍历控制器中的用户,我可以执行user.fullName();
如果我在视图中执行相同操作,则会出现未定义的方法错误。
我可以直接在控制器或视图中访问模型属性(例如user.firstName,user.lastName)
在其他MVC架构上(例如rails / 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 :(得分:0)
在使用pop()
之前,看起来必须在阵列上运行toJSON
函数。然后,您将可以访问视图中的属性方法。了解它在sails documentation中的用法。但是,这当然会删除数组中的最后一个元素......