Я начал играть с шаблоном приложения для одной страницы для MVC 5, который поставляется с Visual Studio 2013. Я более чем знаком с Knockout.js
, и хотя я не был с Sammy.js
Я ' вы читали на нем, и это не кажется сложным.Понимание шаблона VS2013 MVC 5 SPA
То, что я, похоже, не могу оборачивать, - это то, как MVC 5 SPA Template объединяет эти технологии или что команда Visual Studio имела в виду для шаблона в качестве примера; шаблон содержит, помимо прочего, файл home.viewModel.js
, который должен служить отправной точкой, но я не могу понять, как я могу добавить больше видов с помощью маршрутов Sammy.js
. Если бы они предоставили второй частичный вид и модель обзора.
Моего вопрос
Итак, короткий рассказ долго, мои настоящие вопросы,
- как я могу идти об отображении частичного вида, связанном с маршрутом
#users
таким образом, что имитирует прилагаемуюhome.viewmodel.js
, так что я могу перемещаться назад от#home
до#users
? Каким будет определение маршрутаSammy.js
вusers.viewModel.js
? - Нужно ли мне что-либо делать, чтобы включить кнопку возврата браузеров, или она будет работать, как только я правильно определил свои маршруты?
- Это он или этот шаблон чувствует себя наполовину испеченным примером?
Следующий код предназначен только для дополнительной справки/контекста, но, возможно, это не обязательно для ответа на вопрос.
Некоторого контекст
Давайте предположим, что я создал частичный вид, _Users.cshtml
, обслуживаемый UserController
, который является контроллером MVC и не WebAPI
контроллера, и что я хочу показать, что частичный вид на средства маршрута Sammy.js
, с которого я создал users.viewModel.js
. Теперь ...
Index.cshtml
Предоставленного вид выглядит следующим образом:
@section SPAViews {
@Html.Partial("_Home")
}
@section Scripts{
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/app")
}
Что я полагаю, это означает, как страницы приложения «оболочка», где остальная часть частичного вида будет загружены, чтобы заменить содержимое _Home
частичный. Проблема заключается в том, что на home.viewmodel.js
Sammy
маршрут инициализируется без прохождения в селекторе для элемента, который будет содержать контент, как этот
Sammy(function() {
this.get('#home', function() {
// more code here
}
вместо, например
Sammy("#content", function() {
this.get('#home', function() {
// more code here
}
Am I предположительно разместить _Users
частично с _Home
с самого начала, так что вид Index
выглядит так:
@section SPAViews {
@Html.Partial("_Home")
@Html.Partial("_Users")
}
@section Scripts{
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/bundles/app")
}
Это, конечно же, будет отображать оба вида одновременно, что не то, что мы хотим.
Мой users.viewmodel.js
выглядит следующим образом:
function UsersViewModel(app, dataModel) {
var self = this;
Sammy(function() {
this.get('#users', function() {
// the following line only makes sense if _Users is not
// called from Index.cshtml
//this.load(app.dataModel.shoppingCart).swap();
});
});
return self;
}
app.addViewModel({
name: "Users",
bindingMemberName: "users",
factory: UsersViewModel
});
Я попытался с помощью метода Sammy.js
swap
, но так как мой _Users
вид является частичным и Sammy
не настроен действовать на определенный элемент всей страницы заменяется ... и кнопка возврата браузера не работает.
Извините за огромное количество текста, и если это очень пустячный вопрос. Меня это беспокоит, что я не могу понять это самостоятельно, даже после прохождения документов.
Привет, Серджи, у меня были те же вопросы, что и вы, но ответы ниже на самом деле не отвечают на них. Вы когда-нибудь это понимали? – Ezi
Hi @Ezi, не совсем. Через очень короткое время я решил отказаться от этого подхода и написать приложение в Durandal ... И в настоящее время я не использую ничего другого, что [Aurelia] (http://aurelia.io) в [сочетании с ASP.NET 5 ] (https://github.com/aurelia/skeleton-navigation/tree/master/skeleton-es2016-asp.net5) :) –
Спасибо за информацию, я думаю, мне придется изменить подход, так как я не могу цифра, что один из. Странно, почему Microsoft решила создать этот шаблон .. – Ezi