gpt4 book ai didi

javascript - DurandalJS - 无需刷新 View 模型即可导航

转载 作者:行者123 更新时间:2023-11-28 02:19:27 25 4
gpt4 key购买 nike

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

比如说,我有 3 个联系人组

All (no Id)

Friends (Id := 1)

Family (Id := 2)

Others (Id := 3)

如果我点击“好友”,则 url 需要更改为 #/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);
}

原因是,我希望有一个中心位置,无论是通过代码还是手动进行调用(更改 Url,或单击超链接)都无关紧要。

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

如果我使用 DurandalJS 中的 router.navigateTo,整个 View 模型将被重新加载。有没有办法使用 DurandalJS 来做到这一点,但不刷新 View 模型?

最佳答案

中心位置是什么意思?

据我了解,这就是您正在寻找的内容:

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.
}
}
}
}
);

因此,如果您将 View 与联系人绑定(bind),那么当您第一次进入此屏幕通过 URL 或超链接查找 friend 时,它应该只从网络服务器加载 friend 数据,然后再返回同一屏幕 friend 的数据应该在那里,不会一次又一次地加载。 Durandal 将使用相同的虚拟机,并且不会重置标志和可观察值(除非并且直到您手动点击浏览器刷新按钮)。

关于javascript - DurandalJS - 无需刷新 View 模型即可导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15889011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com