Я разрабатываю свое первое приложение EmberJS после того, как после нескольких учебных пособий, как практики. Он просто содержит список «таблиц», «столбцов» и «строк», аналогичных базе данных.Ember.js: Правильный способ перебора объекта в модели?
Ссылка на проблемную страницу: http://www.kangarooelectronics.com/fakeDB/#/tables/edit/2
Моя проблема заключается в том, что, когда я иду, чтобы удалить столбец, я получаю: Объект # не имеет метод «deleteRecord» Как я понимаю, это связано с объектом Я повторяю, не имея ссылок на контроллер из-за того, как я создаю массив, который я использую для создания моего списка.
{{#each model itemController='TableList'}}
<a {{action removeTable this}}>Delete</a>
{{/each}}
Я Перебор столбцов с помощью::
Удаление таблицы в порядке, которые указаны в следующей манере работы
{{#each column in currentColumns itemController='TablesEdit'}}
<a {{action removeColumn column}}>Drop</a>
{{/each}}
сниппет из СВЕТИЛЬНИКИ объекта:
FakeDB.Table.FIXTURES = [
{
id: 1,
name: 'Users',
columns: {
1:{'colId':1, 'name':'name'},
2:{'colId':2, 'name':'favorite color'},
3:{'colId':3, 'name':'phone number'}
},
// ...snip... //
Я получаю 'currentColumns' через:
FakeDB.Table = DS.Model.extend({
name: DS.attr('string'),
columns: DS.attr('object'),
rows: DS.attr('object'),
currentColumns: function() {
var newColumns = $.map(this.get('columns'), function(k, v) {
return [k];
});
return newColumns;
}.property('columns'),
// ..snip.. //
Здесь вы можете увидеть мою проблему ... очевидно, что моя «колонка» не будет иметь никаких методов от моего контроллера. Я попробовал что-то вроде этого:
FakeDB.Adapter = DS.FixtureAdapter.extend();
FakeDB.Adapter.map('FakeDB.Table', {
columns: {embedded: 'load'},
rows: {embedded: 'load'}
});
FakeDB.Columns = DS.Model.extend({
colId: DS.attr('integer'),
name: DS.attr('string')
});
FakeDB.Rows = DS.Model.extend({
colId: DS.attr('integer'),
name: DS.attr('string')
});
Но я не мог получить {{#each column in columns}}, чтобы работать с этим.
Любые предложения? Я снова буду читать документы и отправлю сообщение, если найду решение. Спасибо!
EDIT: Итак, я думаю, что нашел другое решение, но я все еще сталкиваюсь с небольшим вопросом.
FakeDB.Table = DS.Model.extend({
name: DS.attr('string'),
columns: FakeDB.Columns.find().filter(function(item, index, self) {
if(item.tableID == 1) { return true; }
})
});
Все еще не уверены, что заменить «item.tableID == 1» с так что я получаю пункты с TABLEID ссылающегося на текущую страницу ...
Колонны структурированы ...
FakeDB.Columns.FIXTURES = [
{
id: 1,
tableID: 1,
name: 'name'
},
// ...snip... //
Но теперь я получаю: утверждения не удалось: Ваше приложение не имеет свойства «Store» определено. Попытки вызвать «найти» на классах моделей не удастся. Пожалуйста, предоставьте один, как с 'YourAppName.Store = DS.Store.extend()'
Я фактически определяющим свойство 'Store' ...
Update: Почти там, удаляются столбцы ссылки из FakeDB.Table. Создал FakeDB.TablesEditRoute, может читать params.table_id. Просто нужно отфильтровать столбцы, а затем он будет работать (может отображать все ATM). Тогда я должен работать над аспектом отношений и сделать его более эффективным. – user981408