DurandalJS - 在没有viewmodel刷新的情况下导航

时间:2013-04-08 21:08:17

标签: javascript durandal

我有一个我在视图上显示的联系人组列表。 当我点击联系人组时,我想更改当前哈希值并加载相关联系人。

说,我有3个联络小组

  

全部(无Id)

     

朋友(Id:= 1)

     

家庭(Id:= 2)

     

其他人(同上:= 3)

如果我点击好友,网址需要更改为#/ people / 1,并且需要使用参数(Id = 1)调用回调。如果单击全部,则不应传递任何ID(#/ people)以加载所有联系人。

类似的东西:

router.when("#/people/:id", function (routeData) {
    console.log(routeData.Id); //Output: 1

    // Load contacts by id
});

router.when("#/people", function () {
    // Load all contacts
});

function onContactGroupClick(contactGroup) {
    router.navigateToWithoutReset("#/people/" + contactGroup.Id);
}

原因是,我希望有一个中心位置,如果通过代码或手工调用无关紧要(更改网址,或点击超链接)。

一个很好的例子是Gmail /通讯录

如果我使用DurandalJS中的router.navigateTo,将重新加载整个视图模型。有没有办法用DurandalJS做这个但没有刷新视图模型?

1 个答案:

答案 0 :(得分:1)

中心位置是什么意思?

根据我的理解,这就是你要找的东西:

define(["services/dataservice"], function (dataservice) {
        var allContacts = ko.observableArray();
        var friendsContacts = ko.observableArray();
        var contacts = ko.observableArray();
        var loadedAllData= false;
        var loadedFriends = false;
        var vm = {
            activate: activate,
            contacts: contacts,
        };
        return vm;

        function activate(routeData) {
            var id = parseInt(routeData.id);
            if(id === 1)
            {
               if(loadedFriends)
               {
                  //push friends observable into contacts
               }
               else
               {
                  //load friends from server and set loadedFriends to true.
               }
            }
            else
            {
               if(loadedAll)
               {
                   //push all contacts this into the contacts array
               }
               else
               {
                   //load from the webserver, and also filter friends and put them into friends observable. Here set both loadedAll and loadedFriends to true.
               }
            }
        }
    }
); 

因此,如果您将视图与联系人绑定,那么当您第一次来到此屏幕从URL或超链接中寻找朋友时,它应该只是从Web服务器加载好友数据,然后再回到同一个屏幕朋友的数据应该是不会一次又一次地加载。 Durandal将使用相同的vm并且不会重置标志和可观察量(除非您手动转到并按下浏览器刷新按钮)。