Javascript SailsJs控制器上下文

Javascript SailsJs控制器上下文,javascript,sails.js,Javascript,Sails.js,有人知道将上下文传递给sails控制器操作的正确方法吗? 以下是我想做这件事的原因: ---AbstractPageController.js--- ---ConcretePageController.js--- 这就是为什么我需要背景 对于这种特殊情况,我找到了以下解决方案: ---routes.js-- 但这似乎有点难看,帆钩(例如政策)停止了工作 我在想另一种方法。其要点是将所有逻辑移到服务中,并使用简单的继承。但这对我来说也很奇怪 有没有更好的方法来达到我写的案例的想法 另外,我上面写的

有人知道将上下文传递给sails控制器操作的正确方法吗? 以下是我想做这件事的原因:

---AbstractPageController.js---

---ConcretePageController.js---

这就是为什么我需要背景

对于这种特殊情况,我找到了以下解决方案:

---routes.js--

但这似乎有点难看,帆钩(例如政策)停止了工作

我在想另一种方法。其要点是将所有逻辑移到服务中,并使用简单的继承。但这对我来说也很奇怪

有没有更好的方法来达到我写的案例的想法


另外,我上面写的所有代码都只是一个例子。

我想您需要预先设置一些数据以发送到视图模板,对吗

是的,你可以在hook(如midleware)或sails警察之前使用

我在we插件中使用sails钩子预加载来自npm模块的sails功能

检查此钩子,了解控制器之后如何在所有请求中加载用户区域设置:
链接:

您应该直接引用控制器

sails.controller.yourControllerName.getTitle()


谢谢您的回答!完全不是,我只是想使用模板方法模式,我从来没有在javascript中使用过这种类型的结构(已经在PHP中使用过)。。。但我认为您可以尝试使用原型,创建一个原型链接:或者在AbstractPageController.js中使用一个回调……不幸的是,使用原型并不能解决问题,因为我需要上下文来使用“this”关键字。使用回调的第二种方法可以工作,但这种解决方案似乎不是正确的方法。不管怎样,谢谢你的帮助。我做了公关,你会感兴趣的。你的帆船版本是什么?你没用帆发电机吗?当前默认的config/routes.js只是marvel.just general answer-bind]:
action:handler.bind(context)即,您的示例可能看起来像:
“/concrete\u page”:concreteController.main.bind(concreteController)
我不会达到目标。想象一下,如果我尝试使用您的解决方案sails.controllers.AbstractPageController.\u getPageData()在ConcretePageController的“main”操作中,会得到什么结果
module.exports = {
    _getPageData: function(req, res) {
        return {
            data: {
                title: this._getTitle(req, res), // if do nothing "this" is global object
                menu: this._getMenu(req, res)
            }
        };
    },

    _getTitle: function(req, res) { return 'Cool Page'; },

    _getMenu: function(req, res) { return [{ href: '/logout' }]; }
};
var _ = require('lodash');
    _super = require('./AbstractPageController.js');

module.exports = _.merge({}, _super, {

    'main': function(req, res) {
        res.view('pageTemplate', this._getPageData(req, res));
    },

    _getTitle: function(req, res) {
        return 'Absolutely - ' + _super._getTitle(req, res);
    },

    _getMenu: function(req, res) {
        return [{ href: '/main/'}].concat(_super._getMenu(req, res));
    }
});
var concreteController = require('../api/controllers/ConcretePageController.js');

module.exports.routes = {
    '/concrete_page': function(req, res) { concreteController.main(req, res); }
}