練習としていくつかのチュートリアルに従ってから、最初の 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()」のように指定してください
実際、「ストア」プロパティを定義しています...