我的一些应用程序初始值设定项似乎没有触发

Some of my application initializers don't seem to trigger?

本文关键字:应用程序 我的      更新时间:2023-09-26

我有一个名为SearchApp的顶级应用程序,它有一个名为TeamApp的子应用程序。文件结构如下:

search_app.js.coffee # The top-level application.
team_app/
  app.js.coffee
  team_list.js.coffee
  team_invite.js.coffee

我在search_app.js.coffee初始化我的应用程序:

window.Domainer = {}
# This is the top level application.
Domainer.SearchApp = new Backbone.Marionette.Application()
# Assign a region to the Application.
Domainer.SearchApp.addRegions(stage: '#stage')

并在 html 视图中启动它:

<script>Domainer.SearchApp.start({});</script>

子模块TeamApp分布在几个文件上(如下)。问题是TeamApp模块中的某些文件似乎无法将初始值设定项添加到SearchApp。我可以从一个文件中的初始化console.log,但在另一个文件中则不能。

# team_app/app.js.coffee
Domainer.SearchApp.module "TeamApp", (TeamApp, SearchApp, Backbone, Marionette, $, _) ->
  # Initializers
  # ----------
  SearchApp.addInitializer (options) ->
    console.log "This will log when I call Domainer.SearchApp.start()"
  # In coffeescript it's important to explicitly return.
  return TeamApp
# team_app/team_list.js.coffee
Domainer.SearchApp.module "TeamApp", (TeamApp, SearchApp, Backbone, Marionette, $, _) ->
  class CompactSearcher extends Marionette.ItemView
    # ... various code relating to this view.
  class TeamList extends Marionette.CollectionView
    # various code relating to this view.
  SearchApp.addInitializer (options) ->
    console.log "This will never log for some reason."
  return TeamApp
# team_app/invite_view.js.coffee
Domainer.SearchApp.module "TeamApp", (TeamApp, SearchApp, Backbone, Marionette, $, _) ->
  class InviteView extends Marionette.ItemView
    # ... various code relating to this view.
  SearchApp.addInitializer (options) ->
    console.log "This will never log either."
  return TeamApp

是否可以将一个模块拆分到多个文件中?这是我唯一能想到的事情正在这里发生。还有什么可能导致问题?

供参考 - 我已经更新了木偶以支持这种情况。


MyApp = new Backbone.Marionette.Application();
MyApp.module("Foo", function(Foo){
  Foo.def1 = true;
});
MyApp.module("Foo", function(Foo){
  Foo.def2 = true;
});
MyApp.Foo.def1; //=> true
MyApp.Foo.def2; //=> true

你问:

是否可以将一个模块拆分到多个文件中?

检查骨干木偶来源确认这正是正在发生的事情:

// Get the module name, and check if it exists on
// the current parent already
moduleName = moduleNames[i];
module = parentModule[moduleName];
if (!module){ 
  // This is where the module definition is used...
}
return module;

因此,如果您尝试多次定义同一模块,则只会使用第一个定义。