javascript - 如何以 AMD/RequireJS 风格定义 "type"

标签 javascript mvvm requirejs amd durandal

我正在开发 Durandal SPA,并且我已经设置了一些 View 和 View 模型。我不清楚应该如何在客户端创建“模型”对象。例如,假设我想定义并创建“Person”模型对象。

我的应用程序中的其他所有内容都是定义的 AMD 风格。这允许 Durandal/RequireJS 自动加载它需要的文件。

所以,我的第一个想法是我可以在 models/person.js 文件中定义我的“Person”模型类型,如下所示:

define(function () {
    var id = ko.observable(0);
    var firstname = ko.observable('');
    var lastname = ko.observable('');

    return = {
        id: id,
        firstname: firstname,
        lastname: lastname,
    };
});

但是,我认为这是不对的,因为从这里开始,我认为没有办法真正创建单独的“Person”对象。例如,假设我想创建两个“Person”对象。 Durandal/RequireJS 会很高兴地加载到我的“Person”模块中,但它只是一个对象——我可能想创建“Person”类型的另一个实例,或者另外五个实例,等等。

执行此操作的适当方法是什么?感谢您帮助解决我的困惑!

更新:我收到了一些回复,解释了执行此操作的一些方法。我认为我的困惑源于“模块”不是“类型”或“类”这一事实。它更像是singleton object 。因此,如果您想定义一个类型并将其放入模块中,您需要创建一个模块,本质上是一个 factory .

是吗?

在这种情况下,工厂是有意义的。但是,我有一个澄清的问题:这是在 Durandal/RequireJS/AMD 风格的 JavaScript 应用程序中定义模型类型的工厂可接受的方法吗?我确信我不是第一个遇到这个问题的人。我想知道以前是如何解决这个问题的,并且(特别是)AMD 世界中是否有关于如何定义可重用类型的公认约定。

最佳答案

define(function () {

    return function(){
       var self = this;
       self.id = ko.observable(0);
       self.firstname = ko.observable('');
       self.lastname = ko.observable('');
    };
});

define(['models/person'], function(person){
    var myPerson = new person();
});

关于javascript - 如何以 AMD/RequireJS 风格定义 "type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16548693/

相关文章:

javascript - RequireJS 两次加载同一个模块以获得两个独立的命名空间

javascript - RequireJS 和 Headless 测试驱动开发

javascript - 首页的onload事件

javascript - 在页面中多次执行谷歌图像搜索

Silverlight 数据绑定(bind) - 将 ValueConverter 绑定(bind)到 View 模型上的属性

javascript - 来自服务器的 Json 数据未填充主干模型

javascript - 裁剪工具在 Fabric 1.7+ 中不起作用

javascript - STA COM 对象中的阻塞

c# - Xamarin MVVM Light ViewModelLocator 在 xaml 中设置 BindingContext

wpf - 自动建议组合框 - MVVM