我有一个需要有条件填充的视图。
情境: 管理员将在屏幕B上选择用户名,然后将导航到用户填写EG的相同表格。屏幕A,除了所述经理可以选择批准或拒绝用户的请求。
我已经在屏幕A的VM中看到了,我可以执行以下操作。
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;
});
我的问题是,我不确定让Durandal从B导航到A页的最佳方式/方法是什么?我正在做的正确吗?因为感觉有点“hacky”
答案 0 :(得分:2)
导航,至少对我而言,旨在模仿标准的MVC网页导航。在这种情况下,既然您已经知道要转到6,那么为什么不使用这样的锚
<a href="#/userinfo?id=6"/>
更好的方法是使用id splat注册你的路线,这样你的路线就会变成
routes.map({route: 'userinfo/:id, ...
<a href="#/userinfo/6" />
这样你就可以访问激活方法的splat ..有几个例子,但我没有链接到它们。基本上,userinfo viewmodel的activate方法将接受一个参数,从那里你可以加载一个实体或任何你喜欢的东西。希望这会有所帮助。
布拉德