Основная целевая модель = не определено

Я столкнулся с этой проблемой с магистралью, где модель кажется неопределенной для магистральной сети, хотя все сценарии загружены. (Я использую требование для загрузки магистрали и других файлов 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'

});

И последнее, но не менее важное: маршрутизатор с требуемой частью:

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);

    });

},

Вот JSON, который будет получен при выборке:

{ "все пользователи": [ { "имя пользователя": "тестер", "список рассылки": "1", "электронная почта": "тестер@тестер.тест" }, { "имя пользователя": "тестер2", "список рассылки" :"1", "email":"[email protected]" }, { "имя пользователя":"tester3", "список рассылки":"0", "email":"[email protected]" } ] }

заранее спасибо


person BonifatiusK    schedule 16.12.2013    source источник
comment
Где определяется targetModel?   -  person fbynite    schedule 17.12.2013
comment
targetModel — это системная переменная. Так что я не определяю это. Разве вы имеете в виду модель: OF.UsersMdl, часть в сборе?   -  person BonifatiusK    schedule 17.12.2013
comment
Я лично никогда не слышал о переменной по умолчанию targetModel, не могли бы вы опубликовать ссылку на документацию, где она описана?   -  person Marian Polacek    schedule 17.12.2013
comment
Взгляните на backbone-1.1.0.js в строке 669, это просто внутренняя часть коллекции Backbone: модель определена в _.extend(Collection.prototype, Events, { model: Model   -  person BonifatiusK    schedule 17.12.2013
comment
Я вижу, что это новинка для backbone1.1.0 в Backbone 1.0.0, 'targetModel' была такой: var model = new this.model(attrs, options); Однако это все еще не определено для меня, поэтому мне нужно что-то с вызовом модели в коллекции.   -  person BonifatiusK    schedule 17.12.2013
comment
Вы можете поместить этот код в jsfiddle?   -  person ekeren    schedule 17.12.2013
comment
Можете ли вы добавить код json, который получает «php/api/users»   -  person ekeren    schedule 17.12.2013
comment
вот скрипка, но я не знаю, как сделать там API: jsfiddle.net/Uv6R3/3   -  person BonifatiusK    schedule 17.12.2013
comment
Когда вы меняете шаблон обратно, он работает?   -  person ekeren    schedule 17.12.2013
comment
давайте продолжим это обсуждение в чате   -  person ekeren    schedule 17.12.2013


Ответы (1)


У меня была такая же ошибка, и я довольно долго бился об нее головой, потому что магистральная сеть для меня нова, и это усугубляло проблему с выборкой. Во всяком случае, я в конце концов понял, что порядок имеет значение. Дох! (Мне кажется, это менее очевидно при использовании операторов CoffeeScript и «класса».) В одной из моих моделей я устанавливал коллекцию перед моделью (благодаря плохому примеру кода из книги Backbone.js on Rails). Я изменил это, и эта ошибка исчезла, чтобы выявить мою истинную проблему с выборкой.

Точно так же ваше свойство model: может быть недействительным по этой или другой причине, оставив его неопределенным при попытке ссылаться позже.

Примечание: у меня была аналогичная ошибка в Backbone 1.0.0. Когда я обновился до Backbone 1.1.0, я получил точно такую ​​же ошибку в том же месте кода магистрали.

person juanitogan    schedule 13.02.2014
comment
Установка коллекции перед моей моделью была на самом деле моей проблемой, спасибо за подсказку! определенно помог мне :D - person AzurGroup; 13.03.2014