获取到组件的异步视图模型
Get async view model to component
我想从服务器获取视图模型并在我的组件中使用它。可能吗?我的尝试,显然不起作用:
function getDummyViewModelAsync(){
setTimeout(function(){
cb({ foo: 1 });
}, 500);
}
ko.components.register('my-component', {
viewModel: {
createViewModel: function(params, componentInfo) {
getDummyViewModelAsync(function(viewModel){
return viewModel;
});
}
},
template: ...
});
从我们在评论中的交流中不清楚您正在尝试做什么,而动态加载模块无法完成。您可以动态加载模块结构,当然也可以动态填充模块结构的元素。
如果你想手工完成所有事情,你可以这样做。将视图模型传递给获取函数。让 fetching 函数返回一个 promise,并在获取数据并将其放入视图模型中时解决它。您的模板甚至可以动态引用其他模板,因此您在加载时会看到一件事,而在完成后看到另一件事。
function getDummyViewModelAsync(populateMe) {
return new Promise(
function(resolve, reject) {
setTimeout(function() {
populateMe.cb = ko.observable('A value');
resolve('whatever');
}, 500);
}
);
}
ko.components.register('my-component', {
viewModel: {
createViewModel: function(params, componentInfo) {
var vm = {
template: ko.observable('loading'),
ready: ready
},
ready = getDummyViewModelAsync(vm);
ready.then(function() {
vm.template('ready');
});
return vm;
}
},
template: document.getElementById('selector').innerHTML
});
console.clear();
ko.applyBindings();
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<template id='loading'>
Loading...
</template>
<template id='ready'>
Ta da!
<div data-bind="text: cb"></div>
</template>
<template id='selector'>
<!-- ko template: template -->
<!-- /ko -->
</template>
<my-component></my-component>
相关文章:
- 如何在视图模型contet更新更新上调用Jquery函数
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 在MVVM视图模型中处理应用程序范围的元素
- 将c#视图模型转换为javascript模型时转义HTML标记
- 使用knockout.js将数组绑定到视图模型
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 聚合物:在不同的视图模型中多次使用元素
- 使用AMD时未定义淘汰组件视图模型
- 如何在Knockout.js中选中复选框时更新视图模型及其依赖项
- 无法将对象列表从视图模型设置为 javascript 变量
- 挖空视图模型函数仅影响最后一个实例
- 挖空.js嵌套视图模型不起作用
- 为什么我的视图模型不起作用
- 挖空、视图模型位于其他对象和数据绑定中
- 如何将经度/经度值绑定到挖空视图模型方法
- 挖空.js:等待视图模型实例化完成
- 在Knockout视图模型中调用jQuery插件是一种有效的模式
- KnockoutJS:如何避免在applyBindings上运行视图模型函数
- 使用knockoutjs操作视图模型
- Kendo UI自定义验证不适用于模板和视图模型