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; }
    })
});

現在のページを参照するテーブルIDを持つアイテムを取得するために、「item.tableID == 1」を何に置き換えるかまだわかりません...

列は次のように構成されています...

FakeDB.Columns.FIXTURES = [
    {
        id: 1,
        tableID: 1,
        name: 'name'
    },
// ...snip... //

しかし、今では次のように表示されます: assertion failed: Your application does not have a 'Store' property defined. モデル クラスで 'find' を呼び出そうとすると失敗します。「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 に答える