使用Requirejs动态加载Knockout AMD模板&模块异步面对竞争条件

时间:2013-11-13 18:47:26

标签: javascript asynchronous knockout.js requirejs amd

我在我的应用中使用了Knockout,Require和knockout-amd-helpers

我想在Knockout initialize函数内动态加载模型,这个函数会被多次调用,因为我不知道模型是什么,认为这可能是一种更有效的方式来动态加载而不是加载所有模型立刻。请参阅以下代码:

ko.utils.extend(ModelA.prototype.initialize = function(data, parent) {

...

require(['model/Pretag' + ko.unwrap( data.code )], function(Role){ 
    roleInstance = new Role(parent);
    roleInstance.initialize(data.properties);

    ....

    self.roleObservable( roleInstance );
}

...
})

问题:通常情况下,我会从模板的内联JS代码中遇到竞争条件,因为roleInstance.initialize(data.properties);尚未完成初始化。

在模板开始执行任何内联JS调用之前,是否有异步强制执行多个require([..],function(){})加载?

更新:模板内的内联JS代码如下:

<li>Type: (<span data-bind="text: getObject('CODE').getProperties().STATIC_TYPE"></span>)</li>

这将引发错误,因为getObject('CODE').getProperties()未定义,因为getObject('CODE')尚未完成初始化

该列表包含在下面的内联ko模板中。

<!-- ko template: { name: 'template_contains_problem_inline_JS', foreach: people } --><!-- /ko -->

0 个答案:

没有答案