Javascript backbone.js无法扩展路由器
好吧,这很烦人 我将backbone.js与require.js一起使用。我试图在一个单独的文件中定义路由器,然后在页面上实例化它。我尝试了几种方法,但似乎只有一种有效,即: index.phtmlJavascript backbone.js无法扩展路由器,javascript,backbone.js,requirejs,Javascript,Backbone.js,Requirejs,好吧,这很烦人 我将backbone.js与require.js一起使用。我试图在一个单独的文件中定义路由器,然后在页面上实例化它。我尝试了几种方法,但似乎只有一种有效,即: index.phtml require(['/js/accounting/invoice/index/router.js'], function(Router) { window.R = new (Backbone.Router.extend(Router)); }); js返回用于扩展路由器的对象。这是唯一对我
require(['/js/accounting/invoice/index/router.js'], function(Router) {
window.R = new (Backbone.Router.extend(Router));
});
js返回用于扩展路由器的对象。这是唯一对我有效的语法。这样写:
window.R = Backbone.Router.extend(Router);
不知何故产生了一个变量R,它是一个空函数
我的问题是为什么第一种方法有效而其他方法无效?我喜欢这一事实,它的工作,但我感到沮丧,我不知道为什么。这似乎与我在教程中看到的大不相同。这是预期的行为 让我们看看你用第一种方法做了什么,第二种方法做了什么 主干通常有一个特殊的
。在初始化类原型之前,将方法扩展到每个可以增强类原型的类
看起来是这样的:
var Model = Backbone.Model.extend({});
var myModel = new Model({ name: 'myModel' });
.extend
方法返回的是类本身,以及您提供的扩展属性。它基本上接受.prototype
,并将指定的参数对象添加到其中。但是它不会初始化类。使用newclassname()初始化类代码>
因此,如果您看到第一种方法:
window.R = new (Backbone.Router.extend(Router));
它实际执行(等于):
在第二种方法中,您实际上使用非初始化的类对象将window.R
赋值,而实际上非初始化的类对象只是一个普通的函数
,,因此我想不学习基本原理是不好的。谢谢:)
var a = Backbone.Router.extend(Router); // Your second approach ends here
window.R = new a();