循环引用木偶.js
circular reference marionette.js
我在我的marionete .js应用程序中有一个循环引用的问题。
问题是:
App.js用一个控制器创建了路由器,这个控制器又需要App.js,这样它才能把视图添加到区域中。如下所示(控制器),当我打印Application
时,由于循环引用,它返回未定义。
controller.js:
define(
['app', 'views/ProjectItemView'],
function (Application, ProjectItemView)
{
'use strict';
console.log(Application); // undefined
return Marionette.Controller.extend({
showProjects : function()
{
Application.main.show(new ProjectItemView());
console.log('project');
}
});
}
);
router.js:
define
(
['marionette'],
function(Marionette)
{
'use strict';
return Marionette.AppRouter.extend
(
{
appRoutes:
{
'dashboard/projects' : 'showProjects'
}
}
);
}
);
app.js
define
(
[
'backbone', 'marionette', 'jquery', 'routers/DashboardRouter', 'controllers/DashboardController',
'views/dashboard/Header'
],
function(Backbone, Marionette, $, DashboardRouter, DashboardController, Header)
{
'use strict';
var app = new Marionette.Application();
app.addRegions({
header: '#header',
main: '#main',
});
app.header.show(new Header());
app.on('initialize:after', function () {
Backbone.history.start({pushState: true});
app.router = new DashboardRouter({
controller : DashboardController
});
});
$(document).on("click", "a[href^='/']", function(event)
{
var href = $(event.currentTarget).attr('href');
console.log(href);
event.preventDefault();
app.router.navigate(href, {trigger: true});
return false;
});
return app;
}
);
现在解决这个问题的最好方法是什么?我完全是新手,所以我真的不知道最好的做法是什么。
也它是正确的,我在我的控制器添加视图?或者我应该在别的地方做?
Thanks in advance
我认为你应该传递一个区域到控制器在时间实例化它,你肯定需要移动你的代码。我有一个示例应用程序工作,但不需要,但是在控制器中创建一个区域的概念,并从主应用程序传递一个区域到它可以在这里演示。
App.addInitializer(function () {
var controller = new BookStoreController({region: App.mainRegion});
layout = new CatalogLayout();
controller.region.show(layout);
var router = new Router({controller:controller});
});
http://jsfiddle.net/rayweb_on/hsrv7/11/希望对你有帮助。
如果我理解正确的话,基本上,你有路由器依赖于应用程序和控制器依赖于应用程序。
如果是这种情况,你只需要将它们分成三个模块:App、Router和Controller。然后定义['app',…]在Router和Controller模块中。下面是我用于JMQ的其他一些基本代码结构。
更新:从using -marionette-with- requirements中,它还讨论了"避免循环依赖"
你可以把ProjectView放到一个木偶模块中。
有关这种技术的示例,请参阅https://github.com/mallim/backbone_examples/blob/master/app/scripts/cats/module.js。
相关文章:
- Node.js引用错误:未定义类名
- 如何使用hasOne和sequelize.js引用两个表
- 角度.js:引用错误:未定义向上
- Hogan.js-引用具有特定索引的项
- 更新不同环境的 HTML 页面中的 JS 引用
- JS:引用错误:未定义函数
- 函数和手表内部的JS引用
- 流星.js:引用错误:窗口未定义
- 未定义 Firefox JS 引用错误事件
- IIS重写规则,将querystring添加到ASP.net页面中的.css和.js引用中
- 使用d3-js引用不同的元素集
- js引用错误消息
- Node.js引用路径绝对
- js引用一个选项值
- 为什么我必须删除一些JS引用才能让JQueryUI工作?
- document.getElementById对文档的JS引用返回错误
- 代码出现错误;ReferenceError:CryptoJS未定义”,虽然我已经包含了必需的.js引用;原因是什么
- DNN - 启用客户端资源管理时重复的 dnn.js引用
- Django:从静态文件目录中的js引用静态文件
- Knockout.js引用父对象