我有这样的场景。
我该怎么做?
目前该页面确实返回“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中我有这个:
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
重现步骤:
我要做的是加载SubItems并选择“Sub Item 1”视图。
答案 0 :(得分:0)
我不确定这是否可行,但您是否可以创建一个单独的辅助函数来加载主视图。然后就是以下情况:
this.get('#Action', function () {
LoadMainView();
}
this.get('#Action/:id', function () {
if($('#parentNode').length == 0) {
LoadMainView(function() {
var id = this.params["id"];
var matchItem = ko.utils.arrayFirst(viewModel.MainItems(), function (item) {
return item.id() == id;
});
viewModel.someSelectedItem(matchItem);
})
}
}
然后,您的LoadMainView函数将接受回调,如下所示:
function LoadMainView(callback) {
$.ajax({
url: '@Url.Action("GetMainView")',
type: "GET",
data: self.someId(),
dataType: "json",
success: function (result) {
$("#parentNode").html(result.message);
if(typeof callback == "function") {
callback();
}
}
});
}
我无法在您的解决方案中对此进行测试(我在打开它时出错),但我相信这是您所要求的一般结构。