Невозможно запросить модель Emberjs при использовании DS.FixtureAdapter
Я не могу запросить мои модели. Я не знаю, что я делаю неправильно.
У меня есть мой магазин, определенный как
App.Store = DS.Store.extend({
revision: 12,
adapter: DS.FixtureAdapter
});
И моя модель определена,
var Feature = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
parent: DS.belongsTo('SimpleTestManager.Feature'),
DS.belongsTo('SimpleTestManager.Project'),
children: DS.hasMany('SimpleTestManager.Feature'),
requirements: DS.attr('string')
});
App.Feature.adapter = DS.FixtureAdapter.create();
App.Feature.FIXTURES = [
{
id: 1,
name: "my first feature",
description: "some description",
parent: null,
project: 1,
children:[2],
requirements: "This is my first feature. It has many requirements."
},
{
id: 2,
name: "a sub feature",
description: "some sub feature.",
parent: 1,
project: 1,
children:[],
requirements: "This is a sub feature."
}
];
Когда я запустил следующее в командной строке
>>App.Features.find({id:'1'})
Error: assertion failed: Not implemented: You must override the DS.FixtureAdapter::queryFixtures method to support querying the fixture store.
Ответы
Ответ 1
Спасибо за вашу помощь, пытаясь понять это.
Из того, что я смог собрать, метод find() вызывает findQuery(), который вызывает queryFixtures() в FixturesAdapter. Идея этого не внедряется для разработчиков, чтобы расширить это, чтобы реализовать свою собственную находку() для выполнения различных результатов поиска. Для базового фильтра по параметру я смог просто сделать это.
////// Stub data store fixture adapter ///////
App.Store = DS.Store.extend({
revision: 12,
//adapter: 'DS.RESTAdapter',
adapter: DS.FixtureAdapter.extend({
queryFixtures: function(fixtures, query, type) {
console.log(query);
console.log(type);
return fixtures.filter(function(item) {
for(prop in query) {
if( item[prop] != query[prop]) {
return false;
}
}
return true;
});
}
})
});
Ответ 2
Мне удалось решить указанную ошибку, используя ответ Дэвида Лая, но без расширения от DS.Store(новый путь после Ember Data 1.0.b.1):
App.FixtureAdapter = DS.FixtureAdapter.extend({
queryFixtures: function(records, query, type) {
return records.filter(function(record) {
for(var key in query) {
if (!query.hasOwnProperty(key)) { continue; }
var value = query[key];
if (record[key] !== value) { return false; }
}
return true;
});
}
});
App.Store = DS.Store.extend({
adapter: 'Fixture'
});
Ответ 3
Я думаю, ваша проблема в том, что у вас отсутствует префикс App
, который вы уже определили, а также префикс DS
для данных ember. Вы также можете удалить Feature.adapter = EmberData.FixtureAdapter.create();
.
Я редактировал ваш код (не тестировался).
App.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});
App.Feature = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
parent: DS.belongsTo('SimpleTestManager.Feature'),
project:DS.belongsTo('SimpleTestManager.Project'),
children: DS.hasMany('SimpleTestManager.Feature'),
requirements: DS.attr('string')
});
App.Feature.FIXTURES = [
{
id: 1,
name: "my first feature",
description: "some description",
parent: null,
project: 1,
children:[2],
requirements: "This is my first feature. It has many requirements."
},
{
id: 2,
name: "a sub feature",
description: "some sub feature.",
parent: 1,
project: 1,
children:[],
requirements: "This is a sub feature."
}
];
Теперь, чтобы запросить конкретный идентификатор, вы должны использовать:
App.Feature.find(1);
Чтобы запросить свойство, которое вы можете сделать:
App.Feature.findQuery({ name: "a sub feature" });
Это должно работать.
Надеюсь, что это поможет
Ответ 4
Проблема заключается в том, что адаптер адаптера фактически не реализует никаких методов запросов. Если вы хотите найти запись по ее идентификатору, вы можете просто вызвать App.Feature.find(id)
, но ничего сложнее, чем это не поддерживается. Даже с помощью DS.RESTAdapter
вам необходимо определить свой собственный интерфейс запросов на сервере для правильной работы запросов.