ノックアウトバインディングを使用してリンクのリストを作成しています。
Javascriptとビューモデルは次のようになります。
$(function () {
var adminViewModel = function()
{
var self = this;
self.leftItems = ko.observable([ { Name: "Item1", Id: 0 }]);
self.getChildren = function (id, list) {
var url ="@Url.Content("~/api/Test/GetChildren/")" + id;
$.getJSON(url, function (data) {
list(data);
});
};
}
var Admin3App = window.Admin3App = window.Admin3App || {};
Admin3App.viewModel = new adminViewModel();
ko.applyBindings(Admin3App.viewModel);
function getLeftChildren(id)
{
Admin3App.viewModel.getChildren(id, Admin3App.viewModel.leftItems);
}
getLeftChildren(0);
}
(編集:の初期化にko.observable
IDがありませんでした(これはエラーを引き起こしませんでしたが、追加しました)
これがどのように機能するかは、ビューモデルが親(id 0)を持たない一連のアイテムをロードすることです。簡単にするために、左のバージョンのみを含めました。ただし、ページには左右に項目のリストがあるので、それぞれに機能があります。
左側のアイテムは、モデルの左側のアイテムを表示するために入力され、以下のように表示されます。ただし、各アイテムはリンクであり、JavaScriptでクリックすると、親IDに基づいてアイテムが更新されます。(エクスプローラーでフォルダービューアーを参照するのとよく似ています)。
しかし、URLを構築するためにノックアウトでバインディングを宣言する方法を理解できません。私はこれがおそらく途方もなく簡単であることを知っています、そして私はそれを見逃しているだけです。
これが私が特に試みたhtmlです
<div class="leftView">
<div data-bind="foreach: leftItems">
<a data-bind="text: Name, attr : { href:'javascript:getLeftChildren(' + Id + ')' }"></a><br />
</div>
</div>
(編集:一重引用符を逃しましたが、とにかく同じエラーが発生しました)しかし、バインディングエラーが発生し続けます