在同一个变量中存储不同的对象

时间:2012-07-31 14:07:23

标签: javascript titanium appcelerator

我正在试图弄清楚如何在某个“命名空间”中存储不同的对象。

我有这样的事情:

app.js

// This is the startup script:
var MyApp = {}
MyApp.ui = {}
MyApp.ui = require('ui/MainWindow');
MyApp.ui = require('ui/SecondWindow');

// Doesn't exist anymore because the 2nd require overwrites the
// first include
MyApp.ui.MainWindow.test;

然后我还有MainWindow.jsSecondWindow.js,如下所示:

var MainWindow = {
    test: "Main"
}

exports.MainWindow = MainWindow;

var SecondWindow = {
    test: "Second"
}

exports.SecondWindow = SecondWindow;

exports.XXXWindow = XXXWindow基本上可以使该对象可用。

因此,在我的app.js中,我尝试将MainWindow对象存储在MyApp.ui中。所以我可以这样称呼它:

MyApp.ui.MainWindow.test

然后我还要将SecondWindow对象添加到其中。所以我可以用同样的方式调用它:

MyApp.ui.SecondWindow.test

但我现在的方式导致第二个要求覆盖第一个。所以它现在只指向SecondWindow。我该怎么办才能调用MyApp.ui ??

中的两个对象

2 个答案:

答案 0 :(得分:1)

我建议你这样做(我很抱歉,如果代码在语法上不正确,但我使用coffeescript而且我不再使用Javascript):

<强> MainWindow.js

var MainWindow = function() {
    return {test: 'Main'};
};
module.exports = MainWindow;

<强> SecondWindow.js

var SecondWindow = function() {
    return {test: 'Second'};
};
module.exports = SecondWindow;

<强> app.js

var myApp = {
    ui: {
        MainWindow: require('MainWindow.js'),
        SecondWindow: require(SecondWindow.js)
    }
};

现在我的个人意见。我更喜欢这样做:

<强> app.js

var MainWindow = require('MainWindow'),
    SecondWindow = require('SecondWindow'),
    myApp = {
        ui: {
            MainWindow: new MainWindow(),
            SecondWindow: new SecondWindow()
        }
    };

答案 1 :(得分:0)

MyApp.ui的第二个分配将覆盖其旧值。但是,您可以执行以下操作:

function inject(obj_into,obj_from){
    for(var x in obj_from)
        obj_into[x] = obj_from[x];
}

MyApp.ui = {MainWindow:{},SecondWindow:{}};
inject(MyApp.ui.MainWindow,require('ui/MainWindow'));
inject(MyApp.ui.SecondWindow,require('ui/SecondWindow'));

首先使用空属性对象MyApp.uiMainWindow初始化SecondWindow并使用inject填充它们。