2013-09-28 28 views
1

我正在構建一個簡單的durandal應用程序。我有一些viewmodels已經從服務器加載它的數據,並且它們依賴於另一個。爲了保持它們同步,我想重新加載viewmodel的數據,因爲它是導航到。我想到的是嘗試使用某種導航事件。什麼是使用它的最佳方式?Durandal導航事件訪問viewmodels

說我有這種視圖模型與它的視圖和東西。每次用戶導航到頁面時如何使其加載其數據(即調用loadData函數)?

define(["knockout", "./repository"], function (ko, repository) { 
    // Door viewmodel 
    var list = ko.observableArray(); 

    function loadData() { 
     // use repository to load the data 
     // map the data to list array 
    } 

    return { 
     list: list, 
     loadData: loadData 
    } 
}); 

我主要是下面的示例應用程序迪朗達爾提供和我的路由器配置是基於示例使用一個。

define(["knockout", "plugins/router"], function(ko, router) { 

    var childRouter = router.createChildRouter() 
     .makeRelative({ 
      moduleId: "vm/catalog", 
      fromParent: true 
     }).map([ 
      { route: ["", "door"], moduleId: "door/index", title: "Drzwi", nav: true }, 
      { route: "doorType", moduleId: "doorType/index", title: "Typy drzwi", nav: true }, 
      { route: "accessory", moduleId: "accessory/index", title: "Akcesoria", nav: true } 
     ]) 
     .buildNavigationModel(); 

    return { 
     router: childRouter 
    } 
}); 

有沒有辦法從路由器中調用函數時,導航頁面或以某種方式傳遞對象對模塊本身的管理事件?換句話說, Durandal中實現導航路由器(生命週期)事件的方式是什麼?

回答

4

你需要仔細閱讀文檔,你正在尋找的所有答案都在那裏。

組成生命週期 getView,激活,結合,bindingComplete,連接,compositionComplete,獨立

http://durandaljs.com/documentation/Using-Composition

把你datacalls在您激活方法 -

define(["knockout", "./repository"], function (ko, repository) { 
    // Door viewmodel 
    var list = ko.observableArray(); 

    function loadData() { 
     // use repository to load the data 
     // map the data to list array 
    } 

    function activate() { 
     loadData(); 
    } 

    return { 
     list: list, 
     activate: activate, 
     loadData: loadData 
    } 
}); 
+0

真,發現一段時間之後。我將需要通過文檔,但它似乎有點對我來說很差:(謝謝你 – patryk

+0

一些更多的信息在這裏:https://github.com/BlueSpire/Durandal/blob/master/docs/2.x/Hooking -Lifecycle-Callbacks.html.md – HockeyJ