Javascript 访问视图中的模型实例方法(Sails.js/EJS)

Javascript 访问视图中的模型实例方法(Sails.js/EJS),javascript,node.js,sails.js,ejs,Javascript,Node.js,Sails.js,Ejs,我注意到,当一个模型实例(对象)被传递给一个视图时,它会被剥夺所有的功能。这有什么办法吗 例如: 我的用户模型有一个方法fullName,它智能地合并了名字、姓氏和前缀 在控制器中,我有: User.find().done(function(err,users){ res.view({ users:users }); }); 如果我在控制器中遍历用户,我可以执行user.fullName() 如果在视图中执行相同操作,则会出现未定义的方法错误 我可以直接在控制器或视图中访问模型

我注意到,当一个模型实例(对象)被传递给一个视图时,它会被剥夺所有的功能。这有什么办法吗

例如:

我的用户模型有一个方法fullName,它智能地合并了名字、姓氏和前缀

在控制器中,我有:

User.find().done(function(err,users){
  res.view({
    users:users
  });
});
如果我在控制器中遍历用户,我可以执行user.fullName()

如果在视图中执行相同操作,则会出现未定义的方法错误

我可以直接在控制器或视图中访问模型属性(例如user.firstName、user.lastName)

在其他MVC体系结构(如rails/ZendHP)上,我通常在模型中执行类似操作,并且可以在视图中的任何需要的地方调用user.fullName(),这使我能够在整个系统中保持干燥和一致

为什么这不起作用?有没有办法让它起作用

型号

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(user)和在控制器和视图中使用console.log(users)之前使用console.log(users),很明显,当模型传递到视图时,这些方法会被剥离。我还尝试了内置方法user.toJSON(),我在视图中得到了一个未定义的方法错误,但它在控制器中正常工作。

看起来在使用
toJSON
之前必须在数组上运行
pop()
函数。然后您将可以访问视图中的属性方法。看看它是如何在中使用的。不过,这当然会删除数组中的最后一个元素…

对我来说很有用。您可以发布您的模型和视图代码吗?另外:您使用的是哪个版本的Sails?v0.10。。。我认为这与我的模型或视图代码没有任何关系,因为即使是内置函数toJSON()也不起作用。此外,如果我在控制器和视图上记录整个用户对象的console.log,则关联的getter/setter也将被删除。@marionebl我添加了模型/视图代码。虽然,这没什么特别的。我可以通过console.log告诉您,users对象在控制器中是完整的,但是当它到达视图时,这些方法被剥离了。无法在此中复制。在
sails lift
之后尝试访问
localhost:1337/test/test
。我没有在数组上调用.toJSON,而是在forEach循环中的单个实例上调用。顺便说一下,如果您只需要一个而不想修改数组,那么可以使用用户[0].toJSON()