【问题标题】:Meteor - How to call an external class methods from other JS files?Meteor - 如何从其他 JS 文件调用外部类方法?
【发布时间】:2015-02-25 11:10:36
【问题描述】:

我是流星新手。我一直在尝试以“面向对象的方式”编写我的流星代码,所以我为我的 Parser 创建了一个名为 Message 的对象,并从我的 app.js 中调用它的方法。

我想实例化对象并从我的 app.js 调用 Message.JS 中定义的方法?

应用结构

应用程序
|--app.html
|--app.js
|--app.css
|--message.js
|--.meteor

message.js

  var Message = {


    init: function( message ){

   /* Initialization function with some properties */

   }

  getHash: function() {
    return this.hash_table;
   }

  parseMessage: function(input) {

 /* Some Parsing logic */

  return(hash_table);
 }
 }

app.js

if (Meteor.isServer) {

 var msg = new Message.init(response);
 var hash =  msg.getHash();
 console.log(hash);

}

【问题讨论】:

    标签: javascript oop meteor instantiation


    【解决方案1】:

    用 var 声明的变量在 Meteor 中具有文件范围,不能从其他文件中访问。 如果您声明的变量不带 var,它将具有更大的范围,并且可以从您的应用程序中看到,

    Message = {
        ...
    }
    

    如果这不起作用,则可能是加载顺序有问题。 message.js 中的代码应该在 app.js 中的代码被调用之前加载。为了确保它是,将 message.js 放在 /lib 文件夹中。此文件夹中的文件总是先于其他所有文件加载。

    【讨论】:

    • 感谢您的回复。但是将 Message 声明为没有 var 的全局变量是行不通的。如何从 app.js 中导入类?
    • @MariusDarila 在主描述中添加了 App 结构
    • 我认为这是加载顺序的问题。尝试将消息 js 添加到 lib 文件夹中。顺便说一句,你不能实例化一个没有函数的对象,所以 new Message.init() 不起作用。尝试 var msg = Message.init(response);或者,如果您需要多个消息对象 Message = function (message) { this.message = message } 和 var msg = new Message(response);
    【解决方案2】:

    将 message.js 添加到名为 lib 的文件夹中,以便在流星启动时首先加载它,请参见 http://docs.meteor.com/#/full/examplefilestructure。然后从 Message 中删除 var 使其成为全局变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多