Backbone / RequireJS和多个模型

时间:2012-02-01 23:20:42

标签: javascript backbone.js requirejs

我主要围绕RequireJS进行思考。我发现它是一种好的/必要的技术,但对我来说,实现它是一个真正的延伸。非常感谢你的帮助!

我正在尝试使用Backbone和RequireJS开发一个相当灵活的应用程序。问题是我完全习惯像new Person()这样的语法,而不必指定依赖项。有没有一种有效的方法来使用RequireJS有很多模型?我认为我的问题始终与退货有关。我考虑使用工厂方法来创建具有require函数的模型,但这样做需要require函数是同步的,这完全违背了RequireJS的目的。

首先要求我的所有模型然后在实例化函数中包含那些模型似乎是不对的 - 或者我是吗?

您对如何构建和建模这样的应用程序有什么建议或教程吗?

感谢您帮助我!

JMAX

1 个答案:

答案 0 :(得分:21)

你可以使用我所说的需要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年!)将大部分内容集中在一个档案:))