Подтвердить что ты не робот

Backbone.js с ASP.NET MVC

В последние несколько дней я читал о Backbone.js и как он упрощает взаимодействие JS-кода с элементами View, в основном в HTML. Я также читал о различиях между KnockoutJS и Backbone.js. Теперь я думаю, что использование одного или другого неизбежно приводит к дублированию кода, который у нас уже есть в нашем приложении MVC (в основном ViewModels и маршрутах в global.asax) внутри наших представлений. По сути, мы требуем, чтобы мы закодировали другой набор моделей в Backbone или Knockout. Насколько я понимаю, с KnockoutJS это еще более распространено, поэтому я подумал, что я выберу Backbone, но теперь я думаю, что это не так, - после нескольких примеров я увидел, что такое же дублирование становится очевидным.

Также как мы поддерживаем такое приложение, если, например, у нас уже есть куча частичных представлений MVC, и теперь мы должны воссоздать их в Backbone, используя некоторый шаблонный движок, такой как шаблоны JQuery?

4b9b3361

Ответ 1

В последнее время я читал о магистралях и нокаутах, а также размышлял о том, как использовать фреймворк с помощью asp.net mvc. Один из способов избежать дублирования моделей - сериализовать (json) модель просмотра на стороне сервера и использовать ее в качестве модели основы или нокаута. Положительный побочный эффект, ваши модели на стороне клиента уже содержат данные о загрузке страницы и не должны извлекать данные через запрос ajax при первой загрузке страницы. Я знаю, что только сериализацию viewmodel serveride недостаточно для магистрали/нокаута, но это может быть отправной точкой. Возможно, сериализованная модель может быть свойством на клиентской модели.

О шаблонах jquery я обычно помещаю шаблон jquery в частичное представление. Таким образом, они легко отображаются в вашем представлении следующим образом:

<script id="SomeTemplate" type="text/x-jquery-tmpl">
    @Html.Partial("Templates/SomeTemplate")
</script>

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

Ответ 2

Я использовал базовую платформу с Rails в проекте один раз, и я закончил переделывать все мои шаблоны в Underscore - underscore.js является зависимостью Backbone и поставляется с собственным языком шаблонов.

Мое приложение не было огромным, поэтому он не занимал много времени. Если ваше приложение уже довольно сложное, это может быть другая история.

Как сказал Сухас, коллекция Backbone имеет возможность извлекать все ваши модели с сервера, и вы можете отправить их обратно с помощью функции сохранения, которая поддерживает обратные вызовы JQuery ajax. Все, что вам нужно сделать, это убедиться, что они сериализованы через JSON.

Я нашел недавнюю серию из четырех частей по использованию Backbone с ASP.NET MVC 3 - может быть, она вам будет полезна: http://www.bitcandies.com/blog/2011/asp-net-mvc3-restful-application-tutorial-with-backbone-js-part-i/

Плюс это дает хорошую ссылку для меня, чтобы вернуться назад, когда я делаю шаг в .net mvc:)

Ответ 3

Я рекомендую, что ddango сказал в своем комментарии к его ответу. Начните разрабатывать новые функции с основой или нокаутом. У нас есть веб-приложение, что большая часть сайта находится в обычном asp.net mvc, и как только мы узнали о нокауте, мы начали создавать страницы, используя нокаут. Они могут сосуществовать мирно. Если тогда есть желание заменить старые функции по любой причине (ремонтопригодность или у вас слишком много времени на руках;)). Тогда вы можете сделать это за один раз.

Стратегия, которую мы начинаем предпринимать, заключается в том, что контроллеры asp.net mvc имеют два типа функций.

  • Действия, возвращающие данные (используемые нокаутом для заполнения шаблонов/элементов управления)
  • Действия, возвращающие HTML, предназначены для запросов страницы.

НТН

Ответ 4

Если вы предпочитаете не переписывать свои частичные элементы в шаблоны, вы можете рассматривать их как таковые, используя методы контроллера, которые возвращают частичное представление в виде html, которое вы извлекаете при визуализации или инициализации представления Backbone, например:

        public ActionResult SomeAction(){ 
           var viewModel = new ViewModel(); 
           return View("~/path/to/partial/view.ascx", viewModel); }
        }

Возможно, вы, возможно, еще раз сделаете этот метод, сначала извлекая модель представления на стороне клиента (или создав ее), а затем отправляя ее в действие вместо создания модели представления в действии.

(я бы возражал против этого как-нибудь, кроме промежуточного, пока вы переходите к шаблонам - вы всегда будете делать сообщение, чтобы что-то сделать, когда у вас может быть клиентская сторона данных, и просто нужна строка шаблона)

re: ViewModels, загрузка данных с контроллера через JsonResult или путем сериализации вначале - это путь. Вам не нужно дублировать много кода для моделей Backbone - json загружается в модель и анализируется на атрибуты, к которым вы можете получить доступ через Apb.

определенно рекомендую эти статьи (хотя и не asp.net mvc specific):

http://backbonetutorials.com/what-is-a-model/

http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/

Учебник cloudedit - это версия (Controllers теперь Routers), но все равно хорошее место для начала - и параллели между Rails и ASP.NET MVC легко увидеть.

Невозможно говорить с нокаутом!

Ответ 5

Вы можете использовать свое приложение ASP.NET MVC как услугу RESTful, испускающую JSON для ваших моделей просмотров. Модели Backbone могут напрямую сопоставляться с этим JSON.