从 keystone.js 发送部分以与 ui.view 一起使用

Sending partials from keystone.js for use with ui.view

我一直在努力解决这个问题,但终究无法弄清楚我错过了什么。

所以我想设置keystone,但是想在前端使用angular,又想避免每次都重新加载页面。

angular 运行 非常好而且很快。但是现在我正在尝试在后端为部分设置路由,虽然我可以设法让它们设置为回答,但我不能让它们只发送部分,无论我做什么它都会将整个页面发送回去大部头书。与 html、body、头。

到目前为止我已经设法弄清楚我需要一条路线,所以导入我的 uiview 目录并添加以下路线:

var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);

// Common Middleware
keystone.pre('routes', middleware.initLocals);
keystone.pre('render', middleware.flashMessages);

// Import Route Controllers
var routes = {
    views: importRoutes('./views'),
    uiviews: importRoutes('/uiviews'), 
};

// Setup Route Bindings
exports = module.exports = function (app) {
    // Views
    app.get('/', routes.views.index);
    app.get('/uiviews/index',routes.uiviews.index);
    app.get('/blog/:category?', routes.views.blog);
    app.get('/blog/post/:post', routes.views.post);
    app.get('/gallery', routes.views.gallery);
    app.all('/contact', routes.views.contact);

    // NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
    // app.get('/protected', middleware.requireUser, routes.views.protected);

};

我认为发生的事情是预编译器 (keystone.pre('routes', middleware.initLocals);) 抓住它并按照它认为的方式包装它假设,但我不确定。

我什至试图用我的 uiroute 在 ./routes 中创建一个 uiviews.js,但这给了我 404 错误

var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);



// Import Route Controllers
var routes = {
    uiviews: importRoutes('/uiviews'), 
};

// Setup Route Bindings
exports = module.exports = function (app) {
    // Views
    console.log('uiroutes added');
    app.get('/uiview/index',routes.uiviews.index);

    // NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
    // app.get('/protected', middleware.requireUser, routes.views.protected);

};

有什么想法吗?

这更像是一个 Express 问题,而不是 keystone.Js。
你还没有说你想要部分路由器。并且都没有共享该处理程序的呈现代码。

任何方式确保您使用的模板不包含任何其他模板。特别是 default.jade

我终于弄清楚我错过了什么。

从技术上讲,控制发送内容的不是 keystone.js,而是车把。这对除我之外的每个人来说都是显而易见的。

但是,诀窍是告诉车把不要包含布局,这是使用 {layout: false} 完成的。所以我的 uiview 路线看起来像这样(最后一行很神奇):

var keystone = require('keystone');

exports = module.exports = function(req, res) {
  console.log("request for index received");
  var view = new keystone.View(req, res),
    locals = res.locals;
    console.log(locals);

  // Render the view
    console.log(view)

  view.render('uiviews/index', {layout: false});
};

index.js 路由器看起来像这样:

var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);

// Common Middleware
keystone.pre('routes', middleware.initLocals);
keystone.pre('render', middleware.flashMessages);

// Import Route Controllers
var routes = {
    views: importRoutes('./views'),
    uiviews: importRoutes('/uiviews'), 
};

// Setup Route Bindings
exports = module.exports = function (app) {
    // Views
    console.log('index added');
    app.get('/', routes.views.index);   
    app.get('/partners', routes.views.partners);
    app.get('/blog/:category?', routes.views.blog);
    app.get('/blog/post/:post', routes.views.post);
    app.get('/gallery', routes.views.gallery);
    app.get('/philosophy', routes.views.philosophy)
    app.get('/socialmedia', routes.views.socialmedia)
    app.all('/contact', routes.views.contact);
    app.get('/uiviews/index', routes.uiviews.index)

    // NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
    // app.get('/protected', middleware.requireUser, routes.views.protected);

};

现在您可以调用 [host]/uiviews/index 并且只收到部分路由。