0

メニューとサブメニューを含むナビゲーション リストを作成しています。

私は次の構造を持っています:

function Menu(navigation) {

    this.NavigationUrl = ko.observable(navigation.NavigationUrl);
    this.NavigationTitle = ko.observable(navigation.NavigationTitle);
    this.NavigationDescription = ko.observable(navigation.NavigationDescription);

    var mappedChildren = ko.utils.arrayMap(navigation.Children, function (child) {
        return new Menu(child);
    });

    this.Children = ko.observableArray(mappedChildren);
}

function DashboardViewModel() {

    var self = this;
    self.LoggedUser = ko.observable("");
    self.Navigations = ko.observableArray([]);

    $.get('/Home/DashboardDependencies', {}, function (result) {

        self.LoggedUser(result.LoggedUser);

        var mappedNavigations = ko.utils.arrayMap(result.Navigations, function (item) {
            var menu = new Menu(item);

            // When I alert item, the result appears properly:
            // { "NavigationTitle": "blah", "NavigationDescription": "bleh" [...] }
            alert(JSON.stringify(item));

            // But when I alert the new menu object, the result doesn't appear:
            // Just: "{}"
            alert(JSON.stringify(menu));

            return menu;
        });
        self.Navigations = mappedNavigations;
    });
}

ko.applyBindings(new DashboardViewModel());

だから、それをチェックしてください。アイテム変数をアラートしようとすると、結果が正しく表示されます。新しいメニュー オブジェクトに警告しようとすると、結果が表示され{}ます。なぜこれが起こっているのですか?

助けてくれてありがとう!

4

1 に答える 1

0

self.Navigations = ..既存の監視可能な配列を更新しません。そのため、ビューにバインドされた監視可能な配列は更新されず、ビューも更新されません。

self.Navigations(..)代わりに使用してください。

于 2013-10-20T15:55:49.993 に答える