gpt4 book ai didi

JavaScript 错误 : "is not a constructor"

转载 作者:可可西里 更新时间:2023-11-01 01:59:56 32 4
gpt4 key购买 nike

我正在使用 backbone.js 以及 jquery 和 underscore.js

这是我的一些代码(它还没有做任何事情)。奇怪的是,在点击 url "/#users"时没有错误。唯一一次发生错误是当我单击转到不同的哈希,然后单击返回转到“/#users”时。这是我的代码的一部分,接收到错误的行接近末尾 Users = new Users(); 错误说“Users is not a constructor”:

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,如果您好奇的话:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Administration Panel</title>

<!-- Framework -->
<script src="/javascripts/jquery.min.js"></script>
<script src="/javascripts/underscore.min.js"></script>
<script src="/javascripts/backbone.js"></script>

<!-- Application -->
<script src="/javascripts/application.js"></script>

<script id="usersTemplate" type="text/x-underscore-template">
asdf
</script>

</head>
<body>

<div>
<a href="#dashboard">Dashboard</a>
<a href="#users">Users</a>
<a href="#products">Products</a>
<a href="#orders">Orders</a>
<a href="#pages">Pages</a>
<a href="#settings">Settings</a>
</div>

<div id="app"></div>

</body>
</html>

最佳答案

new 只能与 Function 作为操作数一起使用。

new {}  // Error: ({}) is not a constructor

在上下文中检查 Users 的类型:当引发该异常时,它不是函数。

快乐编码


alert(typeof(Users)) 应该可以解决问题。结果应该是可用作构造函数的“函数”。记下失败案例中的内容,并查看下面的原因。

一个有问题的场景(对于 Users = new Users)可能是:一个对象是从函数 Users 构造的,然后是对象(现在不是函数/构造函数)被分配回 Users,因此下一个 new Userskaboom!(查看 showusersdashboard -- 这种行为真的是有意的吗?)

“正确”代码可能是:var users = new Users;用户.blahblah(...);也就是说,使用新的局部变量并且不覆盖全局用户变量/属性。


仅当“返回”到“#foobar”(Fragment Identifier)时才会产生错误的原因是实际上没有加载新页面,因此没有重新加载 JavaScript 和当前(现在损坏的 用户) 正在被使用。 轰隆隆!

摘自 Fragment Identifier :

If the targeted element is located in the current document, a user agent may simply focus the targeted element without having to reload it ...

关于JavaScript 错误 : "is not a constructor",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5655367/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com