淘汰交叉视图模型

时间:2014-10-29 23:42:02

标签: javascript cordova knockout.js

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;
};

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

目标是使用我拥有的javascript工作者来更新扫描编号,这将相应地更新我的应用程序,但我无法使其正常运行。

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

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

目标是这个

VelocityMeetings.scan.viewModel.scannumber(barcodeNum());

但这不能正常工作

3 个答案:

答案 0 :(得分:1)

当您发现自己使用必须相互通信的单独视图模型时,请考虑使用knockout-postbox。如果需要,您可以单向或双向进行通信。在你的情况下,我认为单向沟通就足够了。

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

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

答案 1 :(得分:0)

我发现了自己的问题

scannumber: ko.observable(""),

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

这是我的计算

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

答案 2 :(得分:0)

我以前经历过很多次这个问题..然后我决定写一篇关于同样的文章......

您可以参考这篇文章:http://www.wrapcode.com/knockoutjs/communication-between-multiple-view-models-in-knockoutjs-mvvm-the-right-approach/

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

希望其他人会觉得有用: - )