我有这样的场景。
- 当页面导航到#Action 时初始加载。
- 一旦选择动作被执行 data-bind="with tag is loaded"
- 执行用户点击“做某事”动作。它取代了整个“parentNode”
- 现在当用户点击返回时,sammy.js 注意到井号标签#Action/:id,我需要加载#Action 以返回主视图,然后选择 id 以加载 data-bind="with"再次标记。
我怎样才能做到这一点?
目前该页面确实返回到“Action/:id”,但由于未加载主视图,它不会执行任何操作。我使用了 "this.redirect("#Action") 然后选择了节点,但它不起作用。
<div id="parentNode">
<ul data-bind="foreach: items">
<li data-bind="click: $root.selectItem">
<h2><span data-bind="text: Sometext"></span></h2>
</li>
</ul>
<div data-bind="with: selectedItem">
<a data-bind="click: loadSomething">Do Something</a>
</div>
</div>
在我的视图模型中,我有这个:
viewModel.selectItem= function (item) {
location.hash = "Action/" + item.id();
}
viewModel.loadSomething = function () {
location.hash = "Action/" + viewModel.someSelectedItem().id() +"/SubAction";
}
$.sammy(function () {
this.get('#Action', function () {
$.ajax({
url: '@Url.Action("GetMainView")',
type: "GET",
data: self.someId(),
dataType: "json",
success: function (result) {
$("#parentNode").html(result.message);
}
});
this.get('#Action/:id', function () {
var id = this.params["id"];
var matchItem = ko.utils.arrayFirst(viewModel.MainItems(), function (item) {
return item.id() == id;
});
viewModel.someSelectedItem(matchItem);
});
this.get('#Action/:id/SubAction', function () {
var id = this.params['id'];
$.ajax({
url: '@Url.Action("ViewSomething")',
type: "GET",
data: { id: id },
success: function (result) {
$('#parentNode').html(result.message);
}
});
});
});
示例代码:https ://skydrive.live.com/redir?resid=33048714B5BF3B4B!913
重现步骤:
- 在列出的任何项目下选择“子项目”(项目 1、项目 2、项目 3)
- 选择任何带有标签的子项(子项 1、子项 2)
- 部分视图将显示为带有“下一个视图”链接的“子项目 {x}”
- 单击“下一个视图”链接。
- 将显示“下一个局部视图”。
- 按下返回按钮。
我要做的事情是加载 SubItems 并选择“Sub Item 1”视图。
- 项目清单