我有一个我在视图上显示的联系人组列表。 当我点击联系人组时,我想更改当前哈希值并加载相关联系人。
说,我有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做这个但没有刷新视图模型?
答案 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并且不会重置标志和可观察量(除非您手动转到并按下浏览器刷新按钮)。