骨干模型获取苗条框架时出错

时间:2014-06-09 20:20:42

标签: backbone.js cordova slim

我试图让一个简单的应用程序正常工作。它使用骨干,纤细的框架和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

我似乎无法找出代码有什么问题,它应该是非常基本的。谢谢你的期待!

1 个答案:

答案 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}}

演示:http://jsfiddle.net/ambiguous/E7V84/