私はこのようなシナリオを持っています。
- ページが #Action に移動したときに最初に読み込まれます。
- 選択アクションが実行されると、data-bind="with タグが読み込まれます"
- ユーザーが「何かをする」アクションをクリックすると実行されます。「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}」と「次のビュー」リンクで表示されます
- 「次のビュー」リンクをクリックします。
- 「次の部分図」が表示されます。
- 戻るボタンを押します。
私がやろうとしているのは、サブアイテムをロードして「サブアイテム1」ビューを選択することです。
- リスト項目