2013-05-25 6 views
13

モデルに照会できません。私は何が間違っているのか分からない。DS.FixtureAdapterを使用しているときにEmberjsモデルを照会できません

I私の店は

App.Store = DS.Store.extend({ 
     revision: 12, 
     adapter: DS.FixtureAdapter 
    }); 

として定義され、私のモデルが定義されている、

var Feature = DS.Model.extend({ 
    name: DS.attr('string'), 
    description: DS.attr('string'), 
    parent: DS.belongsTo('SimpleTestManager.Feature'), 
    DS.belongsTo('SimpleTestManager.Project'), 
    children: DS.hasMany('SimpleTestManager.Feature'), 
    requirements: DS.attr('string') 
}); 

App.Feature.adapter = DS.FixtureAdapter.create(); 

App.Feature.FIXTURES = [ 
    { 
     id: 1, 
     name: "my first feature", 
     description: "some description", 
     parent: null, 
     project: 1, 
     children:[2], 
     requirements: "This is my first feature. It has many requirements." 
    }, 
    { 
     id: 2, 
     name: "a sub feature", 
     description: "some sub feature.", 
     parent: 1, 
     project: 1, 
     children:[], 
     requirements: "This is a sub feature." 
    } 
]; 

私は

>>App.Features.find({id:'1'}) 
Error: assertion failed: Not implemented: You must override the DS.FixtureAdapter::queryFixtures method to support querying the fixture store. 

答えて

21

これを把握していただきありがとうございます。

find()メソッドはfindQuery()を呼び出して、fixturesAdapterのqueryFixtures()を呼び出します。これが実装されていないという考えは、開発者がこれを拡張して別の検索結果をスタブする独自のfind()を実装することです。パラメータの基本的なフィルタについては、私はこれを行うことができました。

////// Stub data store fixture adapter /////// 
App.Store = DS.Store.extend({ 
    revision: 12, 
    //adapter: 'DS.RESTAdapter', 
    adapter: DS.FixtureAdapter.extend({ 
     queryFixtures: function(fixtures, query, type) { 
      console.log(query); 
      console.log(type); 
      return fixtures.filter(function(item) { 
       for(prop in query) { 
        if(item[prop] != query[prop]) { 
         return false; 
        } 
       } 
       return true; 
      }); 
     } 
    }) 
}); 
0

コマンドラインで次のように実行すると、私はあなたの問題があると思いますあなたが既に定義したAppという接頭辞がなく、またember-dataの接頭辞はです。 Feature.adapter = EmberData.FixtureAdapter.create();も削除できます。

あなたのコードを編集しました(テストされていません)。

App.Feature.find(1); 

施設によってクエリにあなたが行うことができます:これは動作するはず

App.Feature.findQuery({ name: "a sub feature" }); 

App.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: 'DS.FixtureAdapter' 
}); 

App.Feature = DS.Model.extend({ 
    name: DS.attr('string'), 
    description: DS.attr('string'), 
    parent: DS.belongsTo('SimpleTestManager.Feature'), 
    project:DS.belongsTo('SimpleTestManager.Project'), 
    children: DS.hasMany('SimpleTestManager.Feature'), 
    requirements: DS.attr('string') 
}); 

App.Feature.FIXTURES = [ 
{ 
    id: 1, 
    name: "my first feature", 
    description: "some description", 
    parent: null, 
    project: 1, 
    children:[2], 
    requirements: "This is my first feature. It has many requirements." 
}, 
{ 
    id: 2, 
    name: "a sub feature", 
    description: "some sub feature.", 
    parent: 1, 
    project: 1, 
    children:[], 
    requirements: "This is a sub feature." 
} 
]; 

は、今あなたが使用する必要があり、特定のIDを照会します。

は、それがここでの問題は、固定具アダプタは、実際に任意のクエリメソッドを実装していないということです

+0

申し訳ありませんが、私は投稿時に物事の名前を変更するのを忘れてしまった。私はRequireJSを使用していました。何らかの理由でfind(some id)を呼び出すことができましたが、find({property: 'query string'})を呼び出すと、これは機能しませんでした。 –

+0

'App.Feature.findQuery({name:"サブフィーチャー}} ' – intuitivepixel

+0

最近私はEmber Cliを使っています。フィクスチャーアダプターの代わりに実際のモックサーバーを使用します。 私は、Fixtureアダプターには、すぐにサポートされている照会メソッドがなかったことを痛感しました。 –

0

お役に立てば幸いです。 IDでレコードを検索する場合は、単にApp.Feature.find(id)を呼び出すことができますが、それより複雑なものはサポートされていません。 DS.RESTAdapterであっても、サーバー上で独自の照会インターフェースを定義して、照会を正しく機能させる必要があります。

+0

これは私のために大きなブロッカーになりつつあります。私はどのようにクエリを実装しようとすることができます正しい方向に私を指すことができますか? –

+0

Ember Dataは、指定されたオブジェクトをURLパラメータの形式でサーバーに渡します。クエリをサポートしたい場合は、使用しているクエリパラメータに基づいてサーバーのレスポンスを変更する必要があります。 – rpowell

30

私はデビッド・ライの答えを使用して説明したエラーを解決するために管理しますが、DS.Store(エンバーデータ1.0.beta.1後の新しい道)から延びるなし:

App.FixtureAdapter = DS.FixtureAdapter.extend({ 
    queryFixtures: function(records, query, type) { 
    return records.filter(function(record) { 
     for(var key in query) { 
      if (!query.hasOwnProperty(key)) { continue; } 
      var value = query[key]; 
      if (record[key] !== value) { return false; } 
     } 
     return true; 
    }); 
    } 
}); 


App.Store = DS.Store.extend({ 
    adapter: 'Fixture' 
}); 
+0

私はこれがエバー統合テストスイートが動作していない理由であることを永遠に知りました。 – shredding

関連する問題