JavaScript错误:“不是构造函数”
我正在使用backbone.js以及jquery和underscore.js
这是我的一些代码(它还没有做任何事情)。 奇怪的是,在点击“/#users”时,没有错误。 错误发生的唯一时间是我然后单击转到另一个哈希,然后单击返回“/#users”。 这是我的代码的一部分,用于向最终Users = new Users();
接收错误的行Users = new Users();
错误说“用户不是构造函数”:
var User = Backbone.Model.extend({ url: function(){return 'api/user/id/' + this.id;} }); var Users = Backbone.Collection.extend({ model: User, url: function(){return 'api/users';}, initialize: function() { } }); var UsersView = Backbone.View.extend({ initialize: function() { this.users = this.options.users; this.render(); }, render: function() { _(this.users).each(function(){ // $('#app').append('here'); }); var template = _.template($('#usersTemplate').text()); $(this.el).html(template({users: this.users})); $('#app').html(this.el); } }); var UserView = Backbone.View.extend({ initialize: function() { this.user = this.options.user; this.render(); }, render: function() { var template = _.template("hello {{user.name}}"); $(this.el).html(template({user: this.user.toJSON()})); $('#app').html(this.el); } }); var Controller = Backbone.Controller.extend({ routes: { 'dashboard' : 'dashboard', 'users' : 'showusers' }, showuser: function(id) { UserList.fetch({ success: function(){ new UserView({user: User}); }, error: function(){ alert('an error of sorts'); } }); }, showusers: function() { Users = new Users(); Users.fetch({ success: function(Users) { new UsersView({users: Users}); }, error: function() { } }); }, dashboard: function() { Users = new Users; Users.fetch({ success: function() { new UsersView({users: Users}); }, error: function() { } }); } }); $(document).ready(function(){ var ApplicationController = new Controller; Backbone.history.start(); });
如果你好奇,随附的HTML:
Administration Panel asdf
new
只能与Function一起用作操作数。
new {} // Error: ({}) is not a constructor
检查上下文中的Users
类型:引发该exception时它不是 Function。
快乐的编码
alert(typeof(Users))
应该做的伎俩。 结果应该是“function”以用作构造函数。 记下失败案例中的内容,并在下面查看原因。
一个有问题的场景(对于Users = new Users
)可能是:一个对象是从Function Users
构建的,然后对象(现在不是一个Function /构造函数)被分配回Users
以便下一个new Users
将去kaboom! (在showusers
和dashboard
查看 – 这种行为真的有意吗?)
“正确”的代码可能是: var users = new Users; users.blahblah(...)
var users = new Users; users.blahblah(...)
; 也就是说,使用新的局部变量, 不要覆盖全局用户变量/属性。
仅在“返回”到“#foobar”( 片段标识符 )时生成错误的原因是没有实际加载新页面,因此不重新加载JavaScript并且正在使用当前(现在已损坏的Users
)。 KABOOM!
片段标识符的摘录:
如果目标元素位于当前文档中,则用户代理可以简单地聚焦目标元素而无需重新加载…
我认为它的语法错误
当我试图在我的函数中return anonymous object
时,这发生在我身上
var FalsEextension=false; ........ ........ return new { FalsEextension, LargeFile };// wrong Syntax
并且正确的语法是
return { FalsEextension, LargeFile };
你可以像这样使用它
ObjectName.FalsEextension