【问题标题】:Custom view/action/controller not working in Sails JS自定义视图/动作/控制器在 Sails JS 中不起作用
【发布时间】:2013-11-09 20:34:07
【问题描述】:

我一定是做错了什么,但我看不到...基本上如果我通过sails generate controller products 创建控制器/模型并在文件/controllers/ProductsController 中添加一些变量到索引操作,例如:

index: function(req, res) {

    return res.view({
        myOne: 'World?',
        myvar: 'hello???',
        title: 'Yeap'
    })

},

当我检查 localhost:1337/products 时,变量肯定会打印在模板中。请注意,我没有添加自定义视图,我的模板文件位于views/products/index.jade(我使用的是 Jade 而不是 EJS)。但是,如果我在 /config/routes 中创建自定义视图,例如:

'/custom': {

    view: 'custom',
    controller: 'ProductsController',
    action: 'customAction'

}

在我的 ProductsController 中,我有一个与前面描述的非常相似的操作:

customAction: function(req, res) {

    return res.view({
        myOne: 'Hello?',
        myvar: 'World???',
        title: 'Yeap'
    })

},

变量没有打印在我的模板中。模板被调用好了,控制器和动作也是如此(看起来如此)。谁能解释我做错了什么?

【问题讨论】:

  • 你把你的视图放在哪里了——custom.jade?​​span>
  • 我已添加到视图文件夹中。不在任何目录下。但是,如果错误是未找到视图,则错误将有所不同。视图渲染正常,但没有数据通过。

标签: node.js sails.js


【解决方案1】:

如果您想通过以下方式访问它,您可以选择将视图命名为与您的操作 customAction.jade 相同的名称:

index: function(req, res) {

  return res.view({
    myOne: 'World?',
    myvar: 'hello???',
    title: 'Yeap'
  })

},

或者您可以使用以下语法访问相同的视图/模板(例如 index.jade):

customAction: function(req, res) {

  return res.view('products/index', {
    myOne: 'World?',
    myvar: 'hello???',
    title: 'Yeap'
  })

},

我有一个使用 ejs here 的工作仓库。

【讨论】:

  • 如何将它们发送到我的客户端 javascript。目前我把它们放在一个隐藏的 div 标签上并使用 jquery 拉它们。有没有更聪明的办法?
  • @VampireCoder 这取决于你想如何使用它。您可能只是在模板引擎中获取它(如果您的对象是帖子列表,您可以在模板中循环遍历它)。但是,如果您想在客户端 js 中使用它,不幸的是,您会被困在使用 jQuery 来获取它或进行 ajax 调用(但这已经发生了很大变化。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多