2013-07-01 178 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