将服务器端 MVC 与 Backbone.js 相结合

Posted

技术标签:

【中文标题】将服务器端 MVC 与 Backbone.js 相结合【英文标题】:Combining Serverside MVC with Backbone.js 【发布时间】:2012-04-17 13:35:55 【问题描述】:

我将 .NET MVC 用于所有服务器端逻辑并提供初始页面,但我的应用程序在客户端非常繁重,因此我采用了 Backbone.JS,事实证明它非常有用。

我不确定如何构建我的系统以结合这两种技术。在我看来,我有两个选择

    从服务器端的 MVC 中废弃“V”,将 JSON 数据返回到 页面加载的客户端并使用骨干客户端模板来构建 来自基本 JSON/Backbone 模型的 GUI。

    从完全以 .NET MVC 呈现的服务器返回初始页面。 同时返回用于渲染它们的数据并调用 collection.reset(silent: true) 方法链接起来 将数据返回给视图。我是否认为这会 允许我随后对使用添加/删除/更改进行更改 视图的处理程序?

1 困扰我,因为我害怕放弃服务器端 MVC 的任何部分,这是我的核心技能所在。

2 我担心我可能会通过在客户端服务器上使用两种不同的渲染方法来引入风险和工作。

将服务器端 MVC 与骨干网 1 或 2 或其他方式相结合的正确方法是什么?

【问题讨论】:

我们成功地使用了 asp.net MVC 以及 require、backbone 和 handlebars。当我们开始使用主干时,我们不能完全放弃我们的服务器页面,所以我们使用初始命中来布局默认 html,并使用强类型视图来引导某些模型或集合。我们的 javascript 布局大致反映了我们服务器端视图的布局,每个部分都有文件夹:合同、产品、用户。每个文件夹都包含每个部分的模型、视图和模板。如果您有更具体的问题或疑虑,请告诉我。 另见:***.com/a/7711294/48082 【参考方案1】:

    您并没有真正废弃V,您只是将它的表示从 HTML 更改为 JSON。您感到困扰是因为您对服务器端的东西感觉更舒服,而这并不是一个真正有效的问题……您将完成需要完成的工作,并随时学习/创建 Javascript 模式。

    这是一种方法,如果您需要禁用 javascript 的回退或受可访问性指南的约束,它确实很有帮助。您缺少的部分是您必须在加载页面后重新渲染页面,以将您的模型附加到 DOM 元素。或者,您可以使用为您处理此映射的工具,但这会增加您必须自己权衡的复杂性。

在主干的职业使用中,我们并不一定支持无javascript的场景,所以我们只是在初始加载时加载模板+js,然后让路由器接管并使用更像你第一个想法的东西.由于听起来您才刚刚开始,帮助我们真正开始行动的最重要的事情是意识到对模型进行更改然后让您的视图订阅模型更改事件更容易方式(而不是反过来)。

【讨论】:

完全同意,在 1 点你仍然保留V。还同意我们必须在我们的 Backbone 应用程序中放弃任何服务器端语言帮助,就像我们在与我们的服务器端应用程序层交互的 iPhone 应用程序中应该这样做一样。【参考方案2】:

我不知道 Accepted Way 是什么,但我发现从服务器端组合 V 然后编织 Backbone(等)是有问题的。在非常受控的情况下它可以工作,但如果你的应用程序在客户端将非常繁重,我的建议是忘记在服务器端进行渲染,只返回 JSON 并让 Backbone 通过某种模板(Mustache 等)处理您的内容的渲染。

是的,您可以完全控制 Backbone 事件,因此您可以控制它们来做您想做的事情。

我听说你要放弃你在服务器端的部分技能。我也是这样,但如果这是您的项目所要求的,我想您会发现让服务器端渲染更容易。

祝你好运!

【讨论】:

以上是关于将服务器端 MVC 与 Backbone.js 相结合的主要内容,如果未能解决你的问题,请参考以下文章

MVC架构

如何将backbone.js 与websockets/socket-io/nowjs 一起使用

Node.js 与 CouchDB 和 Backbone.js 一起使用,如何提供 json?

Backbone.js 真的是 MVC 吗? [关闭]

Backbone.js、mongodb 和获取相关对象——客户端还是服务器端?

将 JSON 提要与 Backbone JS 集成