【问题标题】:How to access APIs of a module from another module (Backbone Marionette)如何从另一个模块访问模块的 API (Backbone Marionette)
【发布时间】:2013-04-03 02:39:39
【问题描述】:

这是我第一次尝试使用木偶,我已经设计了我的应用程序的应用程序基础架构,如下所示。

本质上,这个想法是有一个“答案”模块,可以在多个地方重复使用,即提要模块、配置文件模块等

答案模块的外观示例:

@MyApp.module "AnswersModule", (MusesModule, App, Backbone, Marionette, $, _) ->
  class AnswersModule.Router extends Marionette.AppRouter
    appRoutes:
      "answers" : "listAnswers"

  API =
    listAnswers: ->
      //Method will fetch a list of muses and populate a view template
      AnswersModule.List.Controller.listAnswers()

  App.addInitializer ->
    new AnswersModule.Router
      controller: API

问题:

1) 这种设计是否符合使用木偶的最佳实践?

2) 我可以/我应该能够直接从其他模块访问 AnswersModule 中的“listAnswers”方法吗?饲料模块?我应该怎么做呢?

3) 对于需要在自己的布局中嵌入 AnswersModule 的每个模块,获取不同的答案列表需要不同的 URL,即,提要有自己的 url 用于获取答案,配置文件有自己的 URL 用于答案。如何通过答案模块请求不同的列表?

我对木偶比较陌生,我真的很想在继续之前了解这个想法和概念。任何关于上述内容的建议将不胜感激!

【问题讨论】:

  • 我的回答对您有帮助吗?让我知道我是否可以改进它

标签: api module code-reuse marionette infrastructure


【解决方案1】:

我会避免直接调用另一个模块。 Marionette 包含this library,非常有用。

您的模块应该通过事件、命令和请求/响应进行交互。这将解耦您的模块并使您的应用程序更加模块化。

所以你的其他模块会做这样的事情:

API =
  someMethod: ->
  App.commands.execute('list-answers', { url: 'amazing-answers' })

那么您的 AnswersModule 会自行设置以响应该命令并执行它需要执行的操作。

请参阅this talk 以获得良好的概述。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2022-10-09
    • 2020-12-30
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多