javascript - 在模型或集合构造函数中存储特定于模型或集合的 View

标签 javascript backbone.js

我意识到这个问题有很多解决方案,但我想知道社区的意见是什么。

我有一系列模型和收藏品。每个模型都有许多 View ,如详细信息、编辑、打印、旁白、帮助等。集合的 View 通常具有相同的名称(即:旁白、帮助等)。

我的一个要求是我需要在模块中构建我的代码。如果未加载模块,应用程序不应跟踪该模块的功能。例如,如果用户无权查看、编辑其他用户等,则可能会发生这种情况。因此“Users”模块甚至不会被加载。

所以...

我认为存储模型的 View 定义的好地方可能是模型的构造函数,而对于集合的构造函数来说,存储 View 定义的好地方可能是这样。例如:

var User = (function(){ // module definition

    // model definition
    var Model = Backbone.Model.extend({
        initialize: function() {
            // ...
        }
    },{
        Views: {
            Details: Backbone.View.extend({
                // ...
            }),
            Aside: Backbone.View.extend({
                // ...
            }),
            Help: Backbone.View.extend({
                // ...
            })
        }
    });

    // collection definition
    var Collection = Backbone.Collection.extend({
        model: Model,
        initialize: function() {
            // ...
        }
    },{
        Views: {
            Aside: Backbone.View.extend({
                // ...
            }),
            Help: Backbone.View.extend({
                // ...
            })
        }
    });

    // add more code here

    return { // make model and collection public
        Model: Model,
        Collection: Collection
    };

})(); // end module definition

我意识到我可以在其他地方表达我的观点,但这种方法是否会有我可能没有意识到的重大缺点?也许是内存泄漏或者其他不太明显的事情?

谢谢!

最佳答案

我认为您最好不要将 View 作为“类方法”添加到模型和集合中。由于JavaScript 原型(prototype)继承的性质,您实际上并没有添加类方法,而是为模型类型添加构造函数的属性。至于这是否会导致内存泄漏等问题,我不能说。

我想说的是,除非您有未列出的令人信服的理由来使用此结构,您最好将您的 View 分组到简单的对象

如果目标是模块化您的代码,我会利用类似 require.js 的东西或Marionette modules或者只是将“相关”代码分组到 IIFE 中。

如果您有兴趣了解更多关于传入 Backbone.Model.extend 方法的 classProperties 到底发生了什么的信息,那么我建议直接查看annotated source .

关于javascript - 在模型或集合构造函数中存储特定于模型或集合的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13711580/

相关文章:

javascript - JS : function in $(document). 就绪(xx)不工作

javascript - 扩展 React.js 组件

Backbone.js - 大型站点的动态路由

javascript - Backbone.js + Require.js : Collection URL set, 但出现错误 "Uncaught Error: A "url“必须指定属性或函数”

javascript - 横向显示键盘时 HTML Canvas 中断

javascript - 如何从 react-hook-form + Redux 调度

backbone.js 设置模型数组属性

javascript - 渲染嵌套模型 Handlebars ?

javascript - 使用 javascript 聊天客户端 (jsjac) 连接到远程 jabber 服务器

javascript - JavaScript 中的类型定义