AMD实例模块使用自己的构造函数--Durandal

时间:2015-09-23 13:47:41

标签: javascript c# requirejs amd durandal-2.0

在带有MVC + Web API后端的Durandal应用程序中,我有以下public class ProductFilter { public string Name { get; set; } public List<ProductFilter> DependentFilters { get; set; } } 类:

filter.js

我有一个我希望映射到此类的前端实例模型define(["models/filter"], function (filter) { return function (data) { var self = this; data = data || {}; self.name = ko.observable(ko.unwrap(data.name || "")); self.dependentFilters = ko.observableArray(); $.each(ko.unwrap(data.dependentFilters || []), function () { // ---> 'filter' is undefined, so I cannot call new filter(..) self.dependentFilters.push(new filter(this)); }); }; }); 。它目前看起来像这样:

C#

正如您所看到的,filter.js类有一个自己类型的集合,我需要在Durandal模型上复制该结构。在上面的示例中,我尝试将RequireJs模块注入其自身,但filter似乎不喜欢这样,因为undefined变量始终为RequireJs

我的问题可能源于缺少AMDSELECT split_part(col, '/', 2) AS result FROM tbl; 模块知识,但我怎样才能实际调用当前模块的构造函数呢?

1 个答案:

答案 0 :(得分:2)

定义函数以使其具有名称,并从其自身调用它。然后,您可以通过名称引用该函数来返回该函数:

define(function () {
    function filter (data) {
        // ... same as in your question ...
        $.each(ko.unwrap(data.dependentFilters || []), function () {
            self.dependentFilters.push(new filter(this));
        }); 
    };

    return filter;
});