Uncaught TypeError: не имеет метода 'storeKeyFor'

Я новичок в Sproutcore и изучаю основы. Я застрял в следующей проблеме:

У меня есть модель:

Myapp.Space = SC.Record.extend({
    id: SC.Record.attr(Number),
    name: SC.Record.attr(String),
    creator: SC.Record.toOne('Myapp.User', {isMaster: YES, inverse: 'space'})
});

Myapp.User = SC.Record.extend({
    id: SC.Record.attr(String),
    name: SC.Record.attr(String)
});

И контроллер:

Myapp.spaces_controller = SC.ArrayController.create(
 {
       allowsMultipleSelection: NO,
        selection: null,
        isEditable: YES
});

В моем источнике данных я делаю удаленный вызов GET:

fetch: function(store, query) {
            var recordType = query.get('recordType');
            var url;
            if (recordType === Myapp.Space) {
                url = "spaces"
            }
            SC.Request.getUrl(this.baseApiUrl(store) + url).set('isJSON', YES)
                .notify(this, this._didFetch, {
                    store: store,
                    recordType: recordType
                }).send();
        },

_didFetch: function (response, params)  {
            var store = params.store,
                recordType = params.recordType;
            if (SC.$ok(response)) {
                store.loadRecords(recordType, response.get('body'));
            }
        },

Когда я звоню

Myapp.spaces_controller.set('content', Myapp.store.find(Myapp.Space));

(после входа в систему пользователя) я получаю ошибку:

Uncaught TypeError: Object function (props) {
      this.__sc_super__ = ret.prototype;
      return this._object_init(props);
    } has no method 'storeKeyFor' javascript.js?1377681200:11281
SC.Store.SC.Object.extend.loadRecord javascript.js?1377681200:11281
SC.Store.SC.Object.extend.loadRecords javascript.js?1377681200:11337
Myapp.DataSource.SC.DataSource.extend._didFetch data_source.js?1378388369:39
SC.Response.SC.Object.extend._notifyListeners javascript.js?1377681198:392
SC.Response.SC.Object.extend.notify javascript.js?1377681198:413
(anonymous function) javascript.js?1377681198:314
SC.run javascript.js?1377681203:14741
SC.Response.SC.Object.extend.receive javascript.js?1377681198:298
SC.XHRResponse.SC.Response.extend.finishRequest javascript.js?1377681198:628
SC.mixin.handle javascript.js?1377681199:4249
(anonymous function)

Я могу получить доступ к объектам в теле ответа, но хранилище не получает данные.

Я не смог найти упоминаний об этой ошибке в Интернете. Кто-нибудь может помочь?

1 ответ

Решение

Ошибка Object function(props) ... has no method 'storeKeyFor' мне кажется, что вы пытаетесь вызвать функцию в классе, а не в фактическом экземпляре этого класса.

Мое первое предположение состоит в том, что ваш recordType устанавливается как реальный класс, а не как строка, и это может вызывать некоторые проблемы. В общем, я бы рекомендовал использовать 'MyApp.Space' всякий раз, когда речь идет о типах записей, которые будут оцениваться и обнаруживаться во время выполнения. Если он не может найти его по какой-то причине, он выдаст немного более приятное сообщение.

Надеюсь это поможет!

Другие вопросы по тегам