【问题标题】:Durandal. Pass additional data to other view杜兰达尔。将附加数据传递给其他视图
【发布时间】:2013-07-01 14:43:28
【问题描述】:

我有一个需要有条件地填充的视图。

场景: 经理将在屏幕 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”

【问题讨论】:

    标签: javascript single-page-application durandal sammy.js


    【解决方案1】:

    导航,至少对我而言,旨在模仿标准 MVC 网络导航。在这种情况下,既然你已经知道你想去6,为什么不使用这样的anchor

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

    更好的方法是使用 id splat 注册您的路线,这样您的路线就会变成

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

    通过这种方式,您可以访问激活方法上的 splat.. 那里有几个示例,但我没有指向它们的链接。基本上你的用户信息视图模型的激活方法将接受一个参数,你可以从那里加载一个实体或任何你喜欢的东西。希望这会有所帮助。

    布拉德

    【讨论】:

    • 我在一些文章中看到过 splat 这个词,但我对此感到很困惑。但我会做更多的阅读。在我接受之前,我想更清楚一点。不过谢谢。
    • 这里是更多详细信息的链接。我实际上使用的是 durandal 2.0 beta,它使用完全不同的路由引擎,否则我会复制我的一些代码。stackoverflow.com/questions/15300146/…
    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 2013-10-19
    • 2013-08-31
    • 2014-03-19
    • 1970-01-01
    • 2013-04-22
    • 2013-10-21
    • 2014-01-31
    相关资源
    最近更新 更多