Jim*_*Jim 0 amd requirejs backbone.js
在这个简单的Require/Backbone应用程序中
https://github.com/thisishardcoded/require-prob
为什么app.js看到路由器而不是TestView.js?
这是app.js的第一行
define(['router'],function (Router) {
Run Code Online (Sandbox Code Playgroud)
这是TestView.js的第一行
define(['backbone','router'],function(Backbone,Router){
Run Code Online (Sandbox Code Playgroud)
如果你有这种倾向,请查看repo以获取完整的详细信息,下载,运行并检查控制台日志
谢谢!吉姆
更多:好的,答案是 - 因为它的加载顺序,即使它被改变了,我有一个循环依赖不是吗?TestView需要路由器,路由器需要TestView.
在哪种情况下解决方案可能是
var r=require('router);
r.navigate or whatever
Run Code Online (Sandbox Code Playgroud)
但是,路由器到处都无法直接访问,这似乎是一种耻辱,无论如何,上述方法是不是很好的做法?
当然,这是因为循环依赖.要解决它,你要么通过路由器视图的构造函数和视图的模块去掉路由器的依赖,或使用要求("路由器")在您的视图.
第一个选项,router.js:
app_router.on('route:test', function () {
var testView = new TestView({router: app_router});
testView.render();
})
Run Code Online (Sandbox Code Playgroud)
第一个选项,view.js:
define(['backbone'], function(Backbone){
var TestView=Backbone.View.extend({
el: '#test',
initialize: function() {
// get router from constructior options
this.router = this.options.router
},
render: function(){
this.$el.html('<p>Foo!</p>');
console.log("TestView.js does not find 'Router',", this.router);
}
});
return TestView;
});
Run Code Online (Sandbox Code Playgroud)
第二个选项,view.js:
define(['backbone','router'], function(Backbone, router){
// at this point router module is not loaded yet so router is undefined
var TestView=Backbone.View.extend({
el: '#test',
initialize: function() {
// at this point router module is loaded and you may access it with require call
this.router = require('router');
},
render: function(){
this.$el.html('<p>Foo!</p>');
console.log("TestView.js does not find 'Router',", this.router);
}
});
return TestView;
});
Run Code Online (Sandbox Code Playgroud)
第二个选项也在这里描述:http://requirejs.org/docs/api.html#circular
| 归档时间: |
|
| 查看次数: |
3189 次 |
| 最近记录: |