强制 Durandal 页面中的 Knockout 组件在绑定之前等待 Ajax 调用

Posted

技术标签:

【中文标题】强制 Durandal 页面中的 Knockout 组件在绑定之前等待 Ajax 调用【英文标题】:Force Knockout component in Durandal page to wait for Ajax call before binding 【发布时间】:2018-03-01 18:32:45 【问题描述】:

我正在尝试使用 ajax 调用提供的值将自定义剔除组件的参数绑定到视图模型中。但是,似乎绑定是在 ajax 调用完成之前发生的。无论如何要确保在绑定发生之前完成 ajax 调用?谢谢。

带有自定义组件的视图是这样的

<section>
    <mycustomcomponent params="item: item"> </mycustomcomponent>
</section>

这里是视图模型的相关部分

define(function (require) 
    var Item = require('models/item');

    var item;

    return 
        activate: function () 
            var ajaxCall = $.ajax(
                method: 'get',
                url: 'myapicall',
                success: function (data) 
                    item = new Item(data);
                
            );
            return ajaxCall;
        ,


        item: item,
    ;
);

【问题讨论】:

试试var ajaxCall = return $.ajax.....,这应该可以防止调用attached处理程序来同步调用... 【参考方案1】:

您可以尝试将组件包装在 if 绑定中,以便在 item 包含有效内容之前它不会呈现。

<section data-bind="if: item">
    <mycustomcomponent params="item: item"> </mycustomcomponent>
</section>

【讨论】:

以上是关于强制 Durandal 页面中的 Knockout 组件在绑定之前等待 Ajax 调用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Durandal 的 compose 时 JQuery 不定位 DOM 元素

Durandal:在一个孩子中创建功能并从另一个孩子中消费

React Dynamic Table 未在 Knockout 项目中显示

淘汰赛验证:动态约束

如果选择标题而不是值,则 Breeze/Knockout 下拉值不会在数据库中更新

杜兰达尔/淘汰赛。更新其他视图/视图模型