gpt4 book ai didi

javascript - 仅在 DurandalJS 中激活所有组合模块后才附加 View 。

转载 作者:行者123 更新时间:2023-11-30 13:05:34 26 4
gpt4 key购买 nike

我有一个主视图和两个 subview (使用 DurandalJS 组合)。现在,主视图的 viewAttached 事件提前触发,而我的 subview 仍在处理 ajax 请求。理想情况下,主视图只会将 View 附加到 DOM 并在所有组成的 subview 完成激活后运行转换。

<h1>Hello World</h1>    
<div data-bind="compose: { model: 'viewmodels/subview1', activate: true }">Loading...</div>
<div data-bind="compose: { model: 'viewmodels/subview2', activate: true }">Loading...</div>

最佳答案

处理此问题最直接的方法是在主视图激活期间手动激活 subview 。

从 subview 组合绑定(bind)中删除 activate:true,然后在您的主 VM 中执行如下操作:

//in main view model
var subViewModel1 = require("viewModels/subViewModel1");
var subViewModel2 = require("viewModels/subViewModel2");

function activate() {
return $.when(
subViewModel1.activate(),
subViewModel2.activate()
).then(function () {
//finish your main view's activation here
...
});
}

确保您的主 VM 返回一个 promise ,该 promise 仅在子 VM 完成激活时才解析。同样,子 VM 应确保其激活函数返回一个 promise ,该 promise 仅在该子 VM 的 AJAX 请求完成时才解析。

有一个 thread in Durandal Groups讨论了一个类似的概念。如果您还没有,那么绝对值得阅读一下文档,特别是与您的问题相关的文档:

关于javascript - 仅在 DurandalJS 中激活所有组合模块后才附加 View 。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15835709/

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