Я новичок в Sproutcore и изучаю основы. Я застрял на следующей задаче:Uncaught TypeError: не имеет метода 'storeKeyFor'
У меня есть модель:
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)
я могу получить доступ к объектам в теле ответа, но в магазине не получает данные.
Не удалось найти упоминание об этой ошибке в Интернете. Может ли кто-нибудь помочь?
После публикации вопроса я нашел проблему, у меня возникло противоречивое имя класса. Но теперь я столкнулся с следующей проблемой: я получил ошибку: 'Uncaught TypeError: не могу вызвать метод 'get' из undefined javascript.js? 1377681200: 13225 SC.RecordArray.SC.Object.extend.storeDidChangeStoreKeys javascript.js? 1377681200 : 13225 (анонимная функция) javascript.js 1377681200: 10205 SC.Set.SC.mixin.forEach javascript.js 1377681203: 8171 SC.Store.SC.Object.extend._notifyRecordArrays javascript.js 1377681200: 10204 SC.Store.SC.Object.extend.flush' – ceed
Можете ли вы использовать gist.github.com для создания примера с полным кодом, который терпит неудачу? –
Спасибо, что предложили дополнительную помощь! Я только что решил эту проблему, это было не что иное, как Sproutcore, я забыл установить параметр «запрос» в функции обратного вызова для метода «store.dataSourceDidFetchQuery (query)». Итак, теперь это работает :) – ceed