Как я могу поделиться шаблонами между моим ASP.NET MVC и моим backbone.js внешним интерфейсом? - PullRequest
9 голосов
/ 17 ноября 2011

Я создаю приложение в ASP.NET MVC и рассматриваю backbone.js для взаимодействия на стороне клиента и т. Д.

В идеале, когда страницы загружаются, я бы хотел, чтобы весь существующий контент был предварительнона стороне сервера, а затем любой новый контент, созданный backbone.js на лету.

Естественно, я действительно не хочу писать свои шаблоны дважды.

Я думаю, что большинствоприложение шаблонируется с использованием механизма просмотра бритвы, а затем с помощью шаблонов усов для небольших областей, которые должны быть разделены между сервером и внешним интерфейсом.

Мой вопрос состоит в том, как выглядит фактическая техническая реализация этого?

Можете ли вы предоставить примеры кода того, как этого добиться?

Например, какую библиотеку вы бы использовали для визуализации шаблона на сервере, а затем вручную извлекать текст из файла шаблона ивставить его в JavaScript?

Ответы [ 5 ]

1 голос
/ 14 декабря 2012

Если вы хотите приложение RESTy MVC, я рекомендую ServiceStack . Существует магистральная служба w *stack todo-app , в которой вы можете просмотреть исходный код.

Я сделал нечто подобное (не используя усы), когда контроллер выводит модель в виде json для работы с магистралью.

1 голос
/ 29 мая 2012

Я оцениваю Клиентские шаблоны Razor (GitHub) на данный момент.Он находится в версии 0.7.0 и в настоящее время кажется немного хрупким.

Он позволяет ссылаться на отдельные виды частичной бритвы как шаблоны JavaScript.

Как часть коммерческого продукта, мы примемдалее выводить совместимые с Handlebars.js шаблоны из наших частей Razor.

1 голос
/ 17 ноября 2011

Не столько технический, сколько функциональный ответ, см. Мой ответ здесь для функционального потока, включающего рендеринг на стороне сервера и клиента (с использованием усов)

Доступность и все эти JavaScript-фреймворки

чч,

0 голосов
/ 08 января 2014

Сначала мы решили встроить v8 в MVC.net и WebApi и реализовать шаблоны с подчеркиванием или усами, чтобы сохранить точно такие же шаблоны.

Даже если у вас одинаковые шаблоны, логика рендеринга может отличаться, и вам необходимо постоянно реорганизовывать шаблоны, представления внешнего интерфейса и представления внутреннего интерфейса. Особенно, если вы делаете отдых API.

Наконец, мы выбрали другое решение, обеспечивающее альтернативу javascript для требований доступности и seo, с использованием браузера без заголовка (PhantomJs) для отображения страниц.

Это довольно просто реализовать, вам нужно установить PhantomJs на ваш сервер, добавить javascript, чтобы полностью отобразить страницу со всеми взаимодействиями javascript и обслуживать вывод html.

Вы можете найти пример использования здесь: http://backbonetutorials.com/seo-for-single-page-apps/

Пример приведен для node.js, но его легко реализовать с помощью ASP

Фантомный скрипт, который мы используем, похож на

//phantom-server.js

var page = require('webpage').create();
var system = require('system');

var lastReceived = new Date().getTime();
var requestCount = 0;
var responseCount = 0;
var requestIds = [];
var startTime = new Date().getTime();

page.onResourceReceived = function (response) {
    if(requestIds.indexOf(response.id) !== -1) {
        lastReceived = new Date().getTime();
        responseCount++;
        requestIds[requestIds.indexOf(response.id)] = null;
    }
};
page.onResourceRequested = function (request) {
    if(requestIds.indexOf(request.id) === -1) {
        requestIds.push(request.id);
        requestCount++;
    }
};

// Open the page
page.open(system.args[1], function () {});

var checkComplete = function () {
  // We don't allow it to take longer than 5 seconds but
  // don't return until all requests are finished
  if((new Date().getTime() - lastReceived > 300 && requestCount === responseCount) || new Date().getTime() - startTime > 5000)  {
    clearInterval(checkCompleteInterval);
    console.log(page.content);
    phantom.exit();
  }
}
// Let us check to see if the page is finished rendering
var checkCompleteInterval = setInterval(checkComplete, 1);

Есть также услуги, которые дают вам тот же результат: http://prerender.io/

0 голосов
/ 02 ноября 2012

Рассматривали ли вы шаблоны jQuery, в нашем проекте мы использовали их, и я нашел их весьма полезными. На самом деле мы использовали этот http://github.com/BorisMoore/jsviews,, который является немного оптимизированной версией шаблона jquery для рендеринга в строку. У вас там много демоверсий. На стороне сервера мы разместили все шаблоны в одном частичном представлении и отрендерили его.

...