我需要使到KnockoutJS的组件视图模型的WebSocket连接的"onmessage“回调函数中的数据可用。
sockjs.onmessage = function (e) {
//console.log('[.] message', e.data);
if(e.data && e.data.length){
var jsonData = JSON.parse(e.data);
//I need to make this jsonData available to Custom Component of knockoutJS
}
};但是这里的问题是,我没有在我的代码中创建ViewModel的实例。我正在使用KnockoutJS的自定义组件,并通过以下代码对其进行注册
ko.components.register('bing-map', {
viewModel: { require: 'bing-maps/bing-maps' },
template: { require: 'text!bing-map/bing-map.html' }
});我的组件的视图模型如下
define(['knockout'], function(ko){
var MapViewModel = function(params){
var self = this;
self.map = {
options:{
credentials:<bing map key>
}
}
}
return MapViewModel;
});发布于 2017-05-27 00:48:35
将本地可观察对象或视图模型传递给自定义组件
并在套接字事件上更新本地观察值(这将更新组件)
ko.components.register('bing-map', {
viewModel: MapViewModel,
template: '<div data-bind="foreach: data"><div data-bind="text: $data"></div></div>'
});
function MapViewModel(params) {
var self = this;
self.map = {
options: {
credentials: params.other
}
};
debugger;
self.data = params.data;
}
// it could a ViewModel or just a global observable
var dynamicData = ko.observableArray([Number(new Date())]);
ko.applyBindings();
// socket.io simulation
var timer = 0;
var si = setInterval(function() {
dynamicData.push(Number(new Date()));
timer++;
// clear after 10 intervals
if(timer > 9) clearInterval(si);
}, 2000);<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<bing-map params="data: dynamicData, other: 123"></bing-map>
https://stackoverflow.com/questions/44201365
复制相似问题