Backbone targetModel = undefined

时间:2013-12-16 21:41:57

标签: javascript jquery backbone.js requirejs backbone-model

我遇到了这个主干的问题,虽然所有脚本都已加载,但模型似乎未定义为主干。 (我使用require来加载主干和其他javascript文件)。

所以每当我做一个collection.fetch,我都会在firebug中遇到这个错误:

TypeError: targetModel is undefined

当我运行脚本时,此时它仍然存在:

if (attrs instanceof Model) {
    id = model = attrs;
} else {
    id = attrs[targetModel.prototype.idAttribute];
} 

当我用鼠标悬停在targetModel上时,它说:undefined 它现在似乎不起作用,我唯一做的就是更改我的html模板,它只在collection.fetch之后加载。

你能帮帮我吗?

这是我的模特:

var OF = OF || {};

OF.UsersMdl = Backbone.Model.extend({

    default: {

        username: '',
        mailinglist: '',
        email: ''

    },

    initialize: function() {

        //

    },

    result: {
        success: false,
        message: ''
    },

    validate: function(att) {

    }

});

这是集合:

var OF = OF || {};

OF.UsersCollection = Backbone.Collection.extend({

    initialize: function() {
        //
    },

   parse: function(data){
        return data["all-users"];
    },

    model: OF.UsersMdl,

    url: 'php/api/users'

});

最后但并非最不重要的是具有require部分的路由器:

goToUsers: function() {

    require(['./models/users', './views/users_view', './collections/user_collection'], function(UsersMdl, UsersView, UsersCollection) {

        OF.usersMdl = new OF.UsersMdl;
        OF.usersCollection = new OF.UsersCollection;
        OF.usersView = new OF.UsersView;

        //when the collection is fetched
        $.when(OF.usersCollection.fetch({
            data: {
                "admin": OF.login.attributes.admin,
                "session": OF.login.attributes.session
            },
            success: function(){
                //console.log(OF.usersCollection.length);
            }

        //then render the view
        })).then(function(){

            OF.usersView.render();
        }, 300);

    });

},

以下是将由fetch:

重新获取的JSON

{     “所有用户”:     [         {             “用户名”:“测试仪”,             “邮件列表”: “1”,             “电子邮件”: “tester@tester.test”         },         {             “用户名”:“tester2”             “邮件列表”: “1”,             “电子邮件”: “tester2@tester.test”         },         {             “用户名”:“tester3”             “邮件列表”: “0”,             “电子邮件”: “tester3@tester.test”         }     ] }

提前致谢

1 个答案:

答案 0 :(得分:6)

我遇到了同样的错误,并且在很长一段时间内一直反对它,因为骨干对我来说是新的,这也是一个复杂的问题。无论如何,我最终发现订单很重要。卫生署! (在我使用CoffeeScript和“class”语句时不太明显。)在我的模型中,我在模型之前设置了Collection(感谢Rails书中Backbone.js中的错误示例代码)。我扭转了这一点,这个错误消失了,以揭示我的真正的获取问题。

同样,由于这个原因或其他原因,您的model:属性可能无效,在以后尝试引用时将其保留为未定义。

旁注:我在Backbone 1.0.0中遇到了类似的错误。当我升级到Backbone 1.1.0时,我在骨干代码的同一点上得到了这个确切的错误。