如何访问任何视图模型中的路由器状态 - Oracle JET

How to access router states in any of the viewModels - Oracle JET

我已经在 main.js 中定义了根路由器,并且导航代码本身就在那里。在页面上有一个列表,我想从选定的列表项打开视图页面。我可以通过在 html 页面中使用 $root.router.retreive() 来获取页面上的数据。

如何在相应的 viewModel 中获取该值?

导航代码:

self.gotoPage = function(data, event) 
{
   self.router.store(data.id);
   self.router.go(event.target.id);
};

绑定代码:

oj.Router.sync().then(
  function () {
    // bind your ViewModel for the content of the whole page body.
    ko.applyBindings(new RootViewModel(), document.getElementById('globalBody'));
  },
  function (error) {
    oj.Logger.error('Error in root start: ' + error.message);
  }
);

您始终可以使用 $module 访问活动 viewModel 中定义的任何变量。 示例:$module.router.retreive() 用于 HTML 绑定。

如果您要在 ViewModel 中查找值,您可以扩展 router.moduleConfig 并将上下文作为 moduleParams 传递。

或者您可以使用 ko.dataFor 通过 HTML 选择器从绑定上下文中获取数据。

根据评论...

setup: function(routerParent) {
    var router, latestState;
    if (routerParent == undefined) {
        router = oj.Router.rootInstance;
    } else {
        if (routerParent.getChildRouter(routerParent.currentState().id)) {
            routerParent.getChildRouter(routerParent.currentState().id).dispose();
        }
        router = routerParent.createChildRouter(routerParent.currentState().id);
    }
    router.configure(function(stateId) {
        if (stateId) {
            latestState = stateId;
            return new oj.RouterState(stateId);
        }
    });
    oj.Router.sync().then(function(value) {
        //console.info("Calling Router Sync: Result = " + value);
    }, function(reason) {
        console.info("Calling Router Sync: Result = " + reason);
    });
    return $.extend(router, { latestState: latestState });
},