2013-07-01 125 views
1

我有一个需要有条件填充的视图。杜兰达尔。将其他数据传递给其他视图

场景: 经理将在屏幕B上选择一个用户名,然后导航到用户填入EG的相同表格。屏幕A,除了所述管理者可以选择批准或拒绝用户的请求。

我已经看到,在我的虚拟机屏幕上我可以做到以下几点。

var vm = { 
      activate: function (data) { 
      console.log(data); 

      var id = data.id || -1; 

      if (id !== -1) { 
       router.isNavigating(true); 
       http.json('/api/user/'+ id) 
        .done(function (response) { 
         ko.viewmodel.updateFromModel(vm.userInfo, response); 
         router.isNavigating(false); 
        }); 
      } 
      } 
    }; 

然后B(图&视图模型)

视图

<table> 
    <thead> 
      <tr> 
      <td>User</td> 
      <td>Date Requested</td> 
      <td>Action</td> 
      </tr> 
      </thead> 
      <tbody> 
      <tr> 
      <td>Mike</td> 
      <td>19 Jun 2013 
      </td> 
      <td> 
       <input type="button" value="Go" data-bind="click: function() { buttons.goTo(6) }" /> 
       </td> 
      </tr> 
     </tbody> 
</table> 

视图模型

define(['durandal/plugins/router'], function (router) { 
    var buttons = { 
     goTo: function (id) { 
      console.log('goTo clicked'); 

      //this does work in conjunction with my code on B 
      router.navigateTo('#/userinfo?id=' + id);  
     } 
    }; 

    var vm = { 
     buttons: buttons 
    }; 

    return vm; 
}); 

我的问题是,我不知道是什么该会st way /或者如何让Durandal从B导航到A页......我做的对吗?感觉有点“哈克”

回答

2

导航,至少对我来说,是为了模仿标准的MVC网页导航而设计的。在这种情况下,既然你已经知道你要到6,为什么不使用像这样

<a href="#/userinfo?id=6"/> 

一个更好的方式是用一个id图示像注册您的路线锚让你的路线将成为

routes.map({route: 'userinfo/:id, ... 
<a href="#/userinfo/6" /> 

这样你就可以访问激活方法的图示..有几个例子,但我没有链接到他们。基本上你的userinfo viewmodel的激活方法将接受一个参数,并从那里你可以加载一个实体或任何你喜欢的。希望这可以帮助。

布拉德

+0

我看过splat这个词出现在一些文章中,但是我很困惑这一切。但我会做更多的阅读。尽管在接受之前我想更清楚一点。但是谢谢你。 –

+0

这是一个更详细的链接。我实际上使用杜兰达2.0测试版,它使用完全不同的路由引擎,或者我会复制一些我的代码。http://stackoverflow.com/questions/15300146/how-to-use-the-splat-parameter-in -durandal路由器 – BGZ