如何从另一个模块访问模块的API(Backbone Marionette)

时间:2013-04-03 02:39:39

标签: api module code-reuse marionette infrastructure

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

基本上,我们的想法是拥有一个可以在多个地方重复使用的“答案”模块,例如Feed模块,配置文件模块等

enter image description here

Answers模块的示例:

@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来获取不同的答案列表,即feed有自己的答案提取url,profile有自己的答案URL。如何通过Answers模块请求不同的列表?

我对牵线木偶很新,并且非常希望在继续之前得到理念和概念。对此有任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

我会避免直接调用另一个模块。木偶包括this library,这非常有用。

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

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

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

然后你的AnswersModule会将它自己设置为响应该命令并执行它需要做的事情。

有关概述,请参阅this talk