1

条件付きで設定する必要があるビューがあります。

シナリオ: 管理者が画面 B でユーザー名を選択すると、ユーザーが EG に入力した同じフォームに移動します。ただし、管理者はユーザーの要求を承認または拒否するオプションを持っています。

画面上の VM で、AI が次のことを実行できることを確認しました。

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 に移動させるための最良の方法/またはその方法がわからないことです...私がしていることは正しいですか? 少し「ハッキー」な感じなので

4

1 に答える 1

2

ナビゲーションは、少なくとも私にとっては、標準の MVC Web ナビゲーションを模倣するように設計されています。この場合、6 に行きたいことはすでにわかっているので、そのようにアンカーを使用しないでください。

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

より良い方法は、ルートを id スプラットで登録して、ルートが次のようになるようにすることです。

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

このようにして、アクティブ化メソッドでスプラットにアクセスできます。いくつかの例がありますが、それらへのリンクはありません。基本的に、userinfo ビューモデルの activate メソッドはパラメーターを受け入れ、そこからエンティティなどをロードできます。お役に立てれば。

ブラッド

于 2013-07-01T20:05:27.737 に答える