【发布时间】:2013-07-12 19:21:06
【问题描述】:
在遵循一些教程作为练习之后,我正在开发我的第一个 EmberJS 应用程序。它只是包含类似于数据库的“表”、“列”和“行”的列表。
链接到有问题的页面: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}}
FIXTURES 对象的片段:
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}} 使用它。
有什么建议吗?我将再次阅读文档,如果找到解决方案,我会回复。 谢谢!
编辑: 所以我想我找到了另一个解决方案,但我仍然遇到了一个小问题。
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... //
但现在我得到: 断言失败:您的应用程序没有定义“存储”属性。尝试在模型类上调用“查找”将失败。请提供一个与 'YourAppName.Store = DS.Store.extend()'
我实际上是在定义一个“商店”属性...
【问题讨论】:
-
更新:几乎就在那里,从 FakeDB.Table 中删除了列引用。创建了一个 FakeDB.TablesEditRoute,可以读取 params.table_id。只需过滤列,然后它就可以工作(可以列出所有 ATM)。然后我必须在关系方面工作并提高效率。
标签: javascript object model-view-controller model ember.js