私はjqueryとunderscore.jsと一緒にbackbone.jsを使用しています
これが私のコードの一部です(まだ何もしていません)。奇妙なことに、「/#users」というURLにアクセスしても、エラーは発生しません。エラーが発生するのは、クリックして別のハッシュに移動してから、クリックして「/#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:
<!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
は、関数をオペランドとして使用する場合にのみ使用できます。
_new {} // Error: ({}) is not a constructor
_
コンテキストでUsers
のタイプを確認します。その例外が発生した場合、それは関数ではありません。
ハッピーコーディング
alert(typeof(Users))
はトリックを行うべきです。結果は、コンストラクターとして使用できる「関数」でなければなりません。失敗した場合の内容をメモし、理由については以下を参照してください。
問題のあるシナリオの1つ(_Users = new Users
_の場合)は、オブジェクトが関数Users
から作成され、オブジェクト(現在は関数/コンストラクターではない)がUsers
に割り当てられているためです。次の_new Users
_はkaboom!(showusers
とdashboard
の両方を見てください--ということです動作本当に意図した?)
「正しい」コードは次のようです:var users = new Users; users.blahblah(...)
;つまり、新しいローカル変数を使用し、グローバルユーザー変数/プロパティを上書きしない。
エラーが「#foobar」に戻るときにのみ生成される理由( フラグメント識別子 )は、新しいページが実際に読み込まれず、JavaScriptが再読み込みされず、現在の(現在は破損している)ためですUsers
)が使用されています。 カブーム!
フラグメント識別子 からの抜粋:
対象の要素が現在のドキュメントにある場合、ユーザーエージェントは、対象の要素をリロードすることなくフォーカスするだけです...
構文エラーだと思います
これは私がreturn anonymous object
関数内
var FalsEextension=false;
........
........
return new { FalsEextension, LargeFile };// wrong Syntax
正しい構文は
return { FalsEextension, LargeFile };
このように使えます
ObjectName.FalsEextension