【问题标题】:Combining Require.js, Backbone.js and a server side MVC framework结合 Require.js、Backbone.js 和服务器端 MVC 框架
【发布时间】:2012-11-13 18:48:12
【问题描述】:

我们实际上正在计划一个非常复杂的 Web 应用程序。至少按照我自己的标准。 过去,我们一直在使用服务器端 MVC 框架(Codeigniter)和客户端功能(jQuery 和插件)的组合。我们只是在视图中编写了内联 javascript 代码。这按预期工作,但当然有几个缺点:

  • 无缓存
  • 重复的js代码
  • 可维护性问题
  • ...

我现在的主要目标是以高效且易于维护的方式组织客户端代码。但我想继续使用服务器端 MVC,因为现有的技术和一些现有的接口。此外,我想使用 jQuery 和“意大利面条代码”来减少复杂的 DOM 操作。

现在我想到了 Backbone.js 和 Require.js 的组合,但我真的找不到关于如何将它们与服务器端 MVC 组合的教程或任何可靠的描述。 甚至推荐吗?

在我的旧应用中,我的文件结构如下:

  • 应用程序(CodeIgniter)
  • 资产
    • js
    • CSS
    • 图片

有什么想法或最佳实践吗?

谢谢!

【问题讨论】:

    标签: codeigniter backbone.js server-side


    【解决方案1】:

    要补充 mexique1 的建议,可能值得查看 backbone-boilerplate project。它应该为您当前正在考虑的许多问题提供最佳实践解决方案,例如需求和主干的组合、项目客户端的组织以及减少复杂的 DOM 操作(请参阅模板) .

    正如您所料,挑战很可能在于将样板方法与您习惯的方法相结合。然而,这几乎肯定是值得的,因为它应该为你这个和未来的项目提供坚实的基础。

    【讨论】:

    • Backbone 样板项目看起来很棒!
    【解决方案2】:

    我认为 Backbone 是一个不错的选择,这里 Require 不是强制性的。

    Require 只会帮助您组织源代码并可能提高性能。我认为您可以立即从 Backbone 开始,这将是您最常使用的东西,稍后再添加 Require。

    关于 Backbone,是的,只要它返回 JSON,就可以轻松地将其模型与现有的 MVC 应用程序一起使用。要加载现有数据,您将需要使用与url 组合的fetch 方法来适应您现有的代码或您自己的方法。

    一般来说,考虑哪些模型显示在哪些视图中。 Backbone 可以帮助您这样思考:我在由 HTML 制作的视图中显示表示为 JSON 数据的模型。

    另外,对于视图层,重用现有的 HTML 非常容易,因为视图不依赖于任何东西,没有 JavaScript 模板或什么都没有。

    简单示例:

    <div id="user">
        <span class="name">John</span>
    </div>
    
    var UserView = Backbone.View.extend({
        render: function() {
            this.$el('.name').html(this.model.get('name'));
        }
    });
    var userView = new UserView({el: $('#user')[0], model: ...});
    

    在此示例中,#user div 反映了 User 模型的状态及其名称。

    还可以查看 Backbone 中的 Todo App 示例。

    【讨论】:

    • THX。您将如何集成 Backbone?例如,如果我有一个页面(“服务器端”视图)和几个页面元素(主干视图)。是否可以在每个视图/模型/集合中使用一个文件,而不必在页面中手动包含每个文件。 Backbone 中是否有一些功能可以让您自动加载所有相应的元素?
    • 你当然可以在单独的文件中定义每个模型/视图/集合,你绝对应该这样做,但是手动添加它们或在一个文件中将开箱即用,你可以添加 Require稍后,只需几行代码即可实现这一目标。让它发挥作用,让它正确。
    • 我已将 Backbone 与现有的 MVC 后端集成,一旦我不再将服务器端代码视为 MVC 并且更像 API,它就变得更容易了。您将 MVC 属性委托给前端; Backbone 现在将处理这些方面。
    • 所以你的完整路由是由 Backbone 完成的,你只使用服务器端控制器来处理你的数据操作/读取?如果您在客户端进行路由,安全性如何?
    • 是的,我们将所有路由都转换为由骨干网处理。不过,这种方法完全是根据情况而定的。它适用于单页应用程序之类的东西
    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多