2013-10-04 48 views
1

我有兩個模塊,我想通過從一個導航到另一個來進行連接。由於有幾個參數需要傳遞,我想使用查詢字符串。有沒有辦法使用內置的路由器導航到一個模塊,並有被傳遞我的目標參數,像使用路由器導航並將對象作爲查詢字符串傳遞

var params = { 
    param1: "parameter", 
    param2: "anotherparameter" 
} 
router.navigate("theothermodule", params); 

或做我必須手動參數化的對象爲URL字符串,並將它傳遞給路由器的方式。導航像

router.navigate("theothermodule?" + $.param(params)); 

回答

-1

您必須手動參數化的對象爲URL字符串和映射router.activate(http://durandaljs.com/documentation/Using-The-Router/)。

但是,您可以在組合綁定(http://durandaljs.com/documentation/Using-Composition/)中與事件(http://durandaljs.com/documentation/Leveraging-Publish-Subscribe/)或激活數據屬性共享數據。

+0

這是其中的URL需要,因此它可以很容易地共享或書籤的情況。儘管自己做起來並不難,但我真的很驚訝路由器不具備這種簡單直觀的功能。無論如何,感謝您澄清事情。 – patryk

+0

以上答案中的鏈接都沒有工作! – Raeesaa

+0

你是對的,文檔已被移動到這裏:http://durandaljs.com/documentation/api.html – edotassi

1

另一個解決方案是:

var params = { 
    param1: "parameter", 
    param2: "anotherparameter" 
} 
//notes : this object can contain arrays like knockout observable() 
//or observableArray(); 

1.-創建shell.js對象(PARAMS),它像 波紋管映射到你的路由定義:

{ route: 'routestr/:id', moduleId: 'viewmodels/adir/mymodul', title: 'je suis', 
hash: '#routestr', nav:3, routobj: params } 

2:您可以更新,甚至可以在調用此路由之前從任何位置向對象添加新成員,方法是從路由中盜取對象。

var myrouteconfig = router.activeInstruction().config; 
myrouteconfig.param2 = newvalue; 
myrouteconfig.newdlyParam = value; 
router.navigate("#routestr/" + id); 

3.-然後,接收模塊中:

var activate = function (id) { 
     //var myid = parseInt(id); //noelem rubriq      
     var myrouteconfig = router.activeInstruction().config; 
     var mycallobject = myrouteconfig.params; //your object params 
     var valparam2 = mycallobject.param2; // your param2 last value 
     ...... 
} 
+0

這是否將序列化的'params'對象作爲查詢字符串的URL?正如我所看到的,你只使用id路由參數作爲URL的一部分,並提供模塊參數'引擎蓋下'。我想要實現的是能夠傳遞任何對象作爲參數,並在目標模塊中接收它,同時*最重要*在url中具有其所有屬性。那麼URL就是所有參數的橋樑。我所做的是我包裝了杜蘭道爾的路由器,並覆蓋了導航方法,使其獲得更多的第三個參數。簡單但按預期工作。 – patryk

相關問題