Я начал играть с шаблоном приложения для одной страницы для MVC 5, который поставляется с Visual Studio 2013. Я больше знаком с Knockout.js
, и хотя я не был с Sammy.js
, я читал и это не кажется сложным.
То, что я, похоже, не могу оборачивать, - это то, как 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
partial.
Проблема в том, что в home.viewModel.js
маршрут Sammy
инициализируется без передачи в селектор элемента, который будет удерживать содержимое, как этот
Sammy(function () {
this.get('#home', function () {
// more code here
}
вместо, например
Sammy("#content", function () {
this.get('#home', function () {
// more code here
}
Предполагаю ли я разместить части _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
не настроено для действия на конкретном элементе, вся страница заменяется... и кнопка возврата браузера не работает.
Извините за огромное количество текста, и если это очень тривиальный вопрос. Меня беспокоит, что я не могу понять это самостоятельно, даже после прохождения документов.