2

在遵循一些教程作为练习之后,我正在开发我的第一个 EmberJS 应用程序。它只包含类似于数据库的“表”、“列”和“行”的列表。

链接到有问题的页面:http ://www.kangarooelectronics.com/fakeDB/#/tables/edit/2

我的问题是,当我去删除一列时,我得到: Object # has no method '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()' 相同的一个

我实际上是在定义一个“商店”属性......

4

1 回答 1

1

在遵循一些教程作为练习之后,我正在开发我的第一个 EmberJS 应用程序。它只包含类似于数据库的“表”、“列”和“行”的列表。

大多数数据库确实包含表、行和列的列表。大多数 Web 应用程序包含一组固定的表,其中包含预定义的列和动态的行列表。如果这是您的第一个 ember 应用程序,我建议您从能让您走上幸福道路的东西开始。

我实际上是在定义一个“商店”属性......

是的,但 ember 抱怨,因为在 ember 应用程序初始化之前商店不可用。任何访问商店的东西都应该在某种框架挂钩中。定义对象时不能使用它,无论如何这没有多大意义。

可能您的意思是创建一个计算属性,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('')
});
于 2013-07-15T03:48:47.213 回答