1602 / compound

MVC framework. Built on Node.JS. Works on server and browser.
http://compoundjs.com
1.6k stars 183 forks source link

Нелогичное расположение файлов шаблонов и работа экшенов с ними #630

Closed weber closed 8 years ago

weber commented 10 years ago

Позвольте сделать предложения на внесение изменений, так как считаю нелогичное и излишние некоторые моменты работы с шаблонами.

  1. Контроллер в корне директории «controllers» Данный контроллер не найдет свой шаблон(по умолчанию) и вернет «500 Error: Template main/main not found». Логичнее он должен взять шаблон из корня папки «views» — что то вроде глобальных шаблонов.
  2. Контроллер вложенные в директории «controllers/name_folder/» Тут при работе с шаблоном нужно создавать излишнюю вложенность директорий
    К примеру для контроллера /app/controllers/manager/manager_controller.js шаблон будет находится в /app/views/manager/manager/manager.ejs. Зачем лишняя директория manager? Логичнее /app/views/manager/manager.ejs И для того чтобы избегать эту вложенность приходится писать так render('../index',{}); да и красоты не какой :)

Структура приложения

structure

Решение возможно не совсем «класс!» :) но

compound/lib/controller-extensions.js

function getViewFilename() {
       if((self.controllerName.indexOf('/')+1) === 0)
            return view;

        var partControllerName = self.controllerName.split('/');
        delete partControllerName[0];
        var str_partControllerName = partControllerName.join('');
        return path.join(str_partControllerName, view).replace(/\\/g, "/");
    }

После этого теперь: Контроллер в корне директории «controllers»

// /app/controllers/main_controller.js
load('application');
action('main', function (req, res)
{
    render({});
});

использует шаблон /app/views/main.ejs и Контроллер вложенный в директорию «controllers/name_folder/»

// /app/controllers/manager/manager_controller.js
load('application');

action('manager', function (req, res)
{
    render({});
});

использует /app/views/manager/manager.ejs

Если уж нужно использовать дополнительную вложенность директорий то обращение к ним по моему мнению будет симпотнее и понятнее

load('application');

action('manager', function (req, res)
{
    render('manager/manager',{});
});

Зы: Прошу прощения за способ изложения, старался донести как можно доходчиво.

anatoliychakkaev commented 10 years ago

А зачем создавать папку и одноименный контроллер в ней? Быть может более вдумчивый подход к именованию контроллеров создаст меньше проблем?

2014-07-10 18:55 GMT+01:00 Sergey Kirichenko notifications@github.com:

Позвольте внести предложения на внесение изменений, так как считаю нелогичное и излишние некоторые моменты работы с шаблонами.

1.

Контроллер в корне директории «controllers» Данный контроллер не найдет свой шаблон(по умолчанию) и вернет «500 Error: Template main/main not found». Логичнее он должен взять шаблон из корня папки «views» — что то вроде глобальных шаблонов. 2.

Контроллер вложенные в директории «controllers/name_folder/» Тут при работе с шаблоном нужно создавать излишнюю вложенность директорий

К примеру для контроллера /app/controllers/manager/manager_controller.js шаблон будет находится в /app/views/manager/manager/manager.ejs. Зачем линяя директория manager? Логичнее /app/views/manager/manager.ejs И для того чтобы избегать эту вложенность приходится писать так

render('../index',{});

да и красоты не какой :)

Структура приложения

[image: structure] https://camo.githubusercontent.com/9ba69a893efa1f320d26fc05973ddf78e9c7e1e7/687474703a2f2f77737461772e6f72672f6d2f323031342f30372f31302f35306165632d636c69702d396b622e706e67

Решение возможно не совсем «класс!» :) но

compound/lib/controller-extensions.js

function getViewFilename() { if((self.controllerName.indexOf('/')+1) === 0) return view;

    var partControllerName = self.controllerName.split('/');
    delete partControllerName[0];
    var str_partControllerName = partControllerName.join('');
    return path.join(str_partControllerName, view).replace(/\\/g, "/");
}

После этого теперь: Контроллер в корне директории «controllers»

// /app/controllers/main_controller.js load('application'); action('main', function (req, res) { render({}); });

использует шаблон /app/views/main.ejs и Контроллер вложенный в директорию «controllers/name_folder/»

// /app/controllers/manager/manager_controller.js load('application');

action('manager', function (req, res) { render({}); });

использует /app/views/manager/manager.ejs

Если уж нужно использовать дополнительную вложенность директорий то обращение к ним по моему мнению будет симпотнее и понятнее

load('application');

action('manager', function (req, res) { render('manager/manager',{}); });

Зы: Прошу прощения за способ изложения, старался донести как можно доходчиво.

— Reply to this email directly or view it on GitHub https://github.com/1602/compound/issues/630.

weber commented 10 years ago

А зачем создавать папку и одноименный контроллер в ней?

ну хотя бы для того чтобы можно было разграничить контроллеры, ну к примеру: контроллеры каталога в одной директории, а контроллеры магазина в другой, админка в третей( Как бы разделяй и властвуй)

По поводу «одноименный контроллер» есть какие то ограниечения?

qfox commented 10 years ago

@weber что-то тут бемом попахивать начинает ;-) но я за, сам с таким же сталкивался. Часто удобно котроллеры с модельками и вьюхами раскидывать по «библиотекам» и подключать на разных проектах.

mansuleman commented 8 years ago

Мы тут не ищем никакой абсолютной правды. Если у вас есть предложения, пишите код и делайте пул реквесты.