Backbone/RequireJS和多个模型

5
我有些困难理解RequireJS的主要内容。我知道这是一项好的/必要的技术,但对我来说实现它真的是一种挑战。非常感激您的帮助!
我正在尝试使用Backbone和RequireJS开发一个相当灵活的应用程序。问题是我已经习惯了像new Person()这样的语法而不必指定依赖关系。是否有一种有效的方法可以在许多模型中使用RequireJS?我认为我的问题总是与返回值一起工作。我考虑使用工厂方法使用require函数创建模型,但这样做需要require函数是同步的,这完全违背了RequireJS的目的。
似乎不太合适必须先要求所有模型,然后将它们包含在实例化函数中 - 还是必须这样做吗?
您有任何关于如何结构化和建模此类应用程序的建议或教程吗?
感谢您的帮助!
JMax
1个回答

21
你可以使用我所称的require JS模块模式。如果你知道一组类通常会一起使用,你可以像这样做。
首先,您将每个类定义在单独的文件中,然后定义一个模块来将它们组合在一起。
Module.js

define([

    './models/FirstModel',
    './models/SecondModel',
    './views/FirstView',
    './views/SecondView',
    'txt!./templates/template.tpl'

], function(FirstModel, SecondModel, FirstView, SecondView, template) {

    return {
        FirstModel: FirstModel,
        SecondModel: SecondModel,
        FirstView: FirstView,
        SecondView: SecondView,
        template: template
    }

});

然后当你想要使用该模块中的类时,只需执行以下操作

define(['./Module'], function(Module) {

    var AView = Module.FirstView.extend({

        model: Module.FirstModel,

        render: function() {

            this.html(_.template(Module.template)(this.model.attributes));

            if (something) {

                this.$el.append(new Module.SecondView().render().el);
            }
        }
    })

    return AView;
});

我认为使用使用requirejs定义的模块时,我们不应该返回一个实例 - 我们应该始终返回一个构造函数或对象。

你应该完全拥抱定义和引用 - 随着时间的推移,你会开始喜欢它 - 而不必手动添加/跟踪依赖项等等。无处不在或(如2005年那样!)将大部分内容放在一个文件中。


绝对棒极了。谢谢,伙计!我希望我能给你更多的声誉... - Joseph at SwiftOtter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接