动态创建的javascript对象

时间:2014-01-09 17:39:16

标签: javascript jquery backbone.js

我有一个场景,我需要通过“New”关键字声明一个新的骨干模型。但创建的模型类型由用户决定(下拉列表)。

代码如下所示:

var type = $(".typeSelector option:selected").val();
var subType = 'subType' + "." + $(".typeSelector option:selected").attr("subType");

    console.log(type);     //correct
    console.log(subType);  //correct

    $('#form1').append(new MyView({ model: new this.type({ subType: subType }) }).render().$el);

这是.typeSelector下拉列表:

<select class="typeSelector">
        <option value="rotary">Rotary</option>
        <option subType="iron" value="Xgear">Iron X Gear</option>
        <option subType="steel" value="Xgear">Steel X Gear</option>
        <option value="wormDrive">Worm Drive</option>
 </select>

它正确地写入控制台,但它不喜欢我形成对象的方式并在Firebug中给我这个错误:

TypeError:type不是构造函数

2 个答案:

答案 0 :(得分:3)

根据模型的作用域,您可以使用window [typeName]等来引用它。

return new window[ type ]()

简单的幼稚jsFiddle http://jsfiddle.net/8aFpU/

答案 1 :(得分:1)

我想说,做你需要的一个好方法就是替换这部分代码:

model: new this.type({ subType: subType })

通过函数调用:

model: getCorrectType(type, subType)

然后,在函数中,您可以确定所需的正确实例:

function getCorrectType(type, subType) {
    if (type === 'rotary') {
        return new Rotary(); //the correct name of your model
    }

    if (subType === 'iron') {
        return new Iron();
    }
    if (subType === 'steel') {
        return new Steel();
    }
}