2013-07-15 7 views
2

Я разрабатываю свое первое приложение 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' ...

+0

Update: Почти там, удаляются столбцы ссылки из FakeDB.Table. Создал FakeDB.TablesEditRoute, может читать params.table_id. Просто нужно отфильтровать столбцы, а затем он будет работать (может отображать все ATM). Тогда я должен работать над аспектом отношений и сделать его более эффективным. – user981408

ответ

1

Я развиваю свое первое EmberJS приложение после того как после некоторых учебных пособий, как практика. Он просто содержит список «таблиц», «столбцов» и «строк», аналогичных базе данных.

Большинство баз данных содержат список таблиц, строк и столбцов. Большинство веб-приложений содержат фиксированный набор таблиц с заранее определенными столбцами и динамический список строк.Если это ваше первое приложение для ember, я бы посоветовал начать с чего-то, что держит вас на счастливом пути.

Я на самом деле определяющим свойством а «Store» ...

Правда, но уголек жалуется, потому что магазин не доступен до уголек приложение инициализируется. Все, что обращается к магазину, должно быть в каком-то фреймворке. Он не может использоваться при определении ваших объектов, что в любом случае не имеет большого смысла.

Возможно, что вы хотели сделать, это сделать вычисляемое свойство columns так:

FakeDB.Table = DS.Model.extend({ 
    name: DS.attr('string'), 
    columns: function() { 
    FakeDB.Columns.find().filter(function(item, index, self) { 
     if(item.tableID == 1) { return true; } 
    }) 
    }.property('') 
}); 
+0

Спасибо, очень полезно. – user981408

Смежные вопросы