我正在开发 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/