我试图让一个简单的应用程序正常工作。它使用骨干,纤细的框架和cordova。目前,我所要做的就是从MySQL数据库中获取用户模型。客户端代码如下所示:
// Cordova is ready
function onDeviceReady()
{
// This little code snippet prepends our root to any Ajax call.
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
options.url = 'http://localhost/~nmeibergen/IBMI/www/' + options.url;
});
var profileView = new ProfileView();
var Router = Backbone.Router.extend({
routes: {
"": "home"
}
});
var router = new Router();
router.on('route:home', function() {
profileView.render();
});
Backbone.history.start();
}
var Users = Backbone.Collection.extend({
url: 'index.php/users',
model: User
});
var User = Backbone.Model.extend({
urlRoot: 'index.php/users',
defaults: {
user_id: 1,
name: 'Nathan',
}
});
var ProfileView = Backbone.View.extend({
el: '#home',
render: function () {
var users = new Users();
alert('all fine');
users.fetch();
}
});
每当我转到http://localhost/~nmeibergen/IBMI/www/index.php/users
时,我都会得到预期的JSON对象:
[{"user_id":"1","name":"Jhonathan "},{"user_id":"0","name":"Nathan"}]
然而,当运行上面的代码时,它会点击警告“所有罚款”,但随后会给我以下错误和堆栈跟踪:
TypeError: 'undefined' is not an object (evaluating 'targetModel.prototype') in backbone.js:1:689
set backbone.js:1:689
success backbone.js:1:686
fire jquery-1.11.1.js:3119
fireWith jquery-1.11.1.js:3231
done jquery-1.11.1.js:9275
callback jquery-1.11.1.js:9685
我似乎无法找出代码有什么问题,它应该是非常基本的。谢谢你的期待!
答案 0 :(得分:0)
当你这样说时:
var x = 6;
var x
声明将被提升到当前范围的顶部。但是,分配部分将不悬挂。结果就是你这么说:
var x;
// Everything from the top of the scope to your `var x = 6` goes here.
x = 6;
在你的情况下,你这样做:
var Users = Backbone.Collection.extend({
url: 'index.php/users',
model: User
});
var User = Backbone.Model.extend({
urlRoot: 'index.php/users',
defaults: {
user_id: 1,
name: 'Nathan',
}
});
所以var User
被提升到范围的顶部,但User = Backbone.Model.extend(...)
在 Users = Backbone.Collection.extend(...)
之后发生。重新安排代码以匹配实际发生的事情,我们有:
var Users, User;
Users = Backbone.Collection.extend({
//...
model: User
});
User = Backbone.Model.extend({
//...
});
在User
的定义中使用Users
时,您认为User
的价值是多少? undefined
就像任何其他未初始化的变量一样User
。
演示:http://jsfiddle.net/ambiguous/xYkmc/
您需要在Users
之前定义var User = Backbone.Model.extend({
urlRoot: 'index.php/users',
defaults: {
user_id: 1,
name: 'Nathan',
}
});
var Users = Backbone.Collection.extend({
url: 'index.php/users',
model: User
});
:
{{1}}