繁体   English   中英

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

[英]Access model instance methods in view (Sails.js / EJS)

我注意到当一个模型实例(对象)传递给一个视图时,它被剥夺了所有函数。 有没有办法解决?

例:

我的用户模型具有方法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(),我在视图中得到一个未定义的方法错误,但它在控制器中按预期工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM