Javascript 剔除交叉视图模型

Javascript 剔除交叉视图模型,javascript,cordova,knockout.js,Javascript,Cordova,Knockout.js,我在视图模型之外创建了barcodeNum变量,以尝试将数据传递回scannumber变量。如何访问视图模型内部定义的变量 我们的目标是使用我拥有的javascript Worker来更新scannumber,这将相应地更新我的应用程序,但我无法让它正常工作 var barcodeNum = ko.observable(""); VelocityMeetings.scan = function (params) { var errorMessage = ko.observable("");

我在视图模型之外创建了barcodeNum变量,以尝试将数据传递回scannumber变量。如何访问视图模型内部定义的变量

我们的目标是使用我拥有的javascript Worker来更新scannumber,这将相应地更新我的应用程序,但我无法让它正常工作

var barcodeNum = ko.observable("");

VelocityMeetings.scan = function (params) {

var errorMessage = ko.observable("");

var viewModel = {
    errorMessage: errorMessage,
    scannumber: ko.observable(""),
    errorVisible: ko.computed(function () {
        return errorMessage().length != 0;
    }),
    scanBarcode: function () {
        //Capture image with device and process into barcode
        capturePhoto();

        this.scannumber(barcodeNum());
        //this.errorMessage(errMessage);
    },
};


return viewModel;
};
我们的目标就是这样的

function receiveMessage(e) {
    barcodeNum("Test function");
}

var DecodeWorker = new Worker("js/BarcodeScanner.js");
DecodeWorker.onmessage = receiveMessage;

但是这不正常

我自己发现了这个问题

VelocityMeetings.scan.viewModel.scannumber(barcodeNum());
scannumber可以定义为ko.computed,返回值为barcodeNum(),这将对barcodeNum进行任何更改,也将对scannumber()进行更改

这是我的电脑

scannumber: ko.observable(""),

当你发现自己在使用必须相互通信的单独视图模型时,考虑使用。如果你愿意,你可以进行单向或双向的交流。就你而言,我认为单向沟通就足够了

 scannumber: ko.computed(function () { return barcodeNum(); },this),

这个问题我已经解决过很多次了。。然后我决定写一篇关于同一个

您可以参考本文:

在本文中,我已经解释了如何处理多视图模型和多视图模型的单独实例

希望其他人会觉得它有帮助:-)

var barcodeNum = ko.observable('').publishOn('barcodeNum');

var viewModel = {
    scannumber: ko.observable().subscribeTo('barcodeNum'),
    // ...
};