【问题标题】:ReferenceError: label is not defined in Dymo frameworkReferenceError:标签未在 Dymo 框架中定义
【发布时间】:2015-10-11 21:38:34
【问题描述】:

我在玩Dymo 的 JS 框架。 original example 可以正常工作,但即使我不想点击它也会加载 XML。我只在调用它时才重写以执行 Dymo 代码:

<script type="text/javascript">
       function printnow() {              
               $.get("./cont.label", function(labelXml) {
               label = dymo.label.framework.openLabelXml(labelXml);
               }, "text");
               // open label
               // set label text
               label.setObjectText("MENO", "test");
               label.setObjectText("MUNKA", "test");
               label.setObjectText("DESCRIPTION", test);
               // select printer to print on
               // for simplicity sake just use the first LabelWriter printer
               var printers = dymo.label.framework.getPrinters();
               if (printers.length == 0) throw "No DYMO printers are installed. Install DYMO printers.";
               var printerName = "";
               for (var i = 0; i < printers.length; ++i) {
                   var printer = printers[i];
                   if (printer.printerType == "LabelWriterPrinter") {
                       printerName = printer.name;
                       break;
                   }
               }
               if (printerName == "") throw "No LabelWriter printers found. Install LabelWriter printer";
               // finally print the label
               label.print(printerName);

       };
</script> 

不幸的是,在我调用 printnow(); 之后我得到ReferenceError: label is not defined 问题出在哪里?

【问题讨论】:

  • $.get() 调用是异步。在 HTTP 调用完成之前,变量 label 不会获得值,但 $.get() 调用本身会立即返回。将准备和打印内容的代码放入回调中。

标签: javascript dymo


【解决方案1】:

首先你必须阅读这个one

简而言之,您正在处理异步代码。因此,这 label.setObjectText("MENO", "test"); 和其余代码将在此 label = dymo.label.framework.openLabelXml(labelXml); 行之前执行。

最后,你必须这样做:

<script type="text/javascript">
       function printnow() {              
               $.get("./cont.label", function(labelXml) {
               var label = dymo.label.framework.openLabelXml(labelXml);
               // open label
               // set label text
               label.setObjectText("MENO", "test");
               label.setObjectText("MUNKA", "test");
               label.setObjectText("DESCRIPTION", test);
               // select printer to print on
               // for simplicity sake just use the first LabelWriter printer
               var printers = dymo.label.framework.getPrinters();
               if (printers.length == 0) throw "No DYMO printers are installed. Install DYMO printers.";
               var printerName = "";
               for (var i = 0; i < printers.length; ++i) {
                   var printer = printers[i];
                   if (printer.printerType == "LabelWriterPrinter") {
                       printerName = printer.name;
                       break;
                   }
               }
               if (printerName == "") throw "No LabelWriter printers found. Install LabelWriter printer";
               // finally print the label
               label.print(printerName);

               }, "text");

       };
</script> 

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 2012-08-24
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多