0

我有一个使用 case 返回对象的函数

    function GetModel(mymodel){

    var mydatamodel = null; 
    switch(mymodel)
    {
    case 'Contact':
    mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    firstName: { type: "string" },
                                    middleName: { type: "string" },                                                         
                                    lastName: { type: "string" }
                                    }                               
                                });
                                break;

    case 'Address':
    mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    street: { type: "string" }
                                    }                               
                                });
                                break;
    case 'ContactType':     
    mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    name: { type: "string" }                                
                                    }                               
                                });
                                break;
    };

    return mydatamodel  
    };

//Try to create new instance
var mymodel = new GetModel("Contact")

现在这个函数确实返回一个对象,但该对象与使用下面的代码创建一个新对象不同,这是我需要的

 var mydatamodel = kendo.data.Model.define({
                                    id: "__KEY",
                                    fields: {
                                    __KEY: { type: "string" },
                                    __STAMP: { type: "number" },
                                    ID: { editable: false, nullable: true },                                                                
                                    firstName: { type: "string" },
                                    middleName: { type: "string" },                                                         
                                    lastName: { type: "string" }
                                    }                               
                                });

//Create new object;
var mymodel = new mydatamodel();

这按预期工作并创建 kendoui.datamodel 的新实例,其中函数返回 kendoui.data.modal.... 作为函数而不是对象的新实例

我希望能够调用 switch 函数,因为我希望此代码位于不同的 .js 文件中,然后是用于代码分离的主 .html 页面。那么我将如何让上述函数 GetModel 以与 var = kendoui.data.model... 相同的方式运行

谢谢,

4

1 回答 1

2

不要在你的函数上使用 new 运算符。

只需让函数返回一个像这样的实例:

function GetModel(mymodel){

var mydatamodel = null; 
switch(mymodel)
{
case 'Contact':
mydatamodel = kendo.data.Model.define({
                                id: "__KEY",
                                fields: {
                                __KEY: { type: "string" },
                                __STAMP: { type: "number" },
                                ID: { editable: false, nullable: true },                                                                
                                firstName: { type: "string" },
                                middleName: { type: "string" },                                                         
                                lastName: { type: "string" }
                                }                               
                            });
                            break;

case 'Address':
mydatamodel = kendo.data.Model.define({
                                id: "__KEY",
                                fields: {
                                __KEY: { type: "string" },
                                __STAMP: { type: "number" },
                                ID: { editable: false, nullable: true },                                                                
                                street: { type: "string" }
                                }                               
                            });
                            break;
case 'ContactType':     
mydatamodel = kendo.data.Model.define({
                                id: "__KEY",
                                fields: {
                                __KEY: { type: "string" },
                                __STAMP: { type: "number" },
                                ID: { editable: false, nullable: true },                                                                
                                name: { type: "string" }                                
                                }                               
                            });
                            break;
};

return new mydatamodel();
};

并像这样使用您的创建者功能:

var mymodel = GetModel("Contact");

编辑

或者像这样使用你的代码:

var mymodel = new (GetModel("Contact"))();
于 2013-01-06T21:52:00.543 回答