2013-05-25 12 views
13

kullanırken Emberjs Model sorgulanamıyor Modellerimi sorgulayamıyorum. Neyi yanlış yaptığımı bilmiyorum.DS.FixtureAdapter

Ben

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." 
    } 
]; 

Ben komut satırında aşağıdaki çalıştırmak

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

cevap

21

Bunu anlamaya çalışırken yardımlarınız için teşekkür ederiz.

Topladığımdan, find() yöntemi, FixturesAdapter öğesinde queryFixtures() öğesini çağıran findQuery() yöntemini çağırır. Bunun gerçekleştirilememesi fikri, geliştiricilerin farklı arama sonuçlarını saptamak için kendi bulduklarını() uygulayabilmeleridir. Parametre üzerindeki temel bir filtre için bunu yapabildim.

////// 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

Ben senin sorunun olduğunu tahmin benim mağaza

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

olarak tanımlanan Ve modeli tanımladıktan Önceden tanımladığınız App önekini ve ayrıcaeksik Ember-data içinönek. Ayrıca Feature.adapter = EmberData.FixtureAdapter.create();'u da kaldırabilirsiniz.

Kodunuzu düzenledim (test edilmedi).

App.Feature.find(1); 

bir özelliğiyle sorgulamak için Yapabileceğiniz: Bu çalışması gerekir

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." 
} 
]; 

Şimdi kullanması gereken belirli kimliği sorgulamak için.

burada mesele fikstürü adaptörü aslında herhangi bir sorgu yöntemlerini uygulamak olmamasıdır

+0

üzgünüm, ben Gönderi yaparken şeylerin isimlerini değiştirmeyi unuttum. RequireJS kullanıyordum. Bazı nedenlerle bulmayı (bazı kimlikleri) aramayı başardım, ancak arama yaparken ({property: 'query string'}), bu işe yaramadı. –

+0

'App.Feature.findQuery'yi ({name: "bir alt özellik"}) ' – intuitivepixel

+0

deneyebilirsiniz. Bu günlerde Ember Cli kullanıyorum. fikstür adaptörü yerine gerçek bir sahte sunucu kullanarak. Çekirdek sorununun geri döndüğüne inanıyorum, daha sonra Fixture bağdaştırıcısı, kutunun dışında desteklenen sorgu yöntemlerine sahip değildi. –

0

yardımcı olur. Kimliği ile bir kayıt bulmak istiyorsanız, App.Feature.find(id)'u arayabilir, ancak desteklenmeyenlerden daha karmaşık bir şey yapabilirsiniz. DS.RESTAdapter ile bile, sorguları düzgün bir şekilde yapmak için sunucuda kendi sorgu arayüzünüzü tanımlamanız gerekir.

+0

Bu benim için büyük bir engelleyici oluyor. Birisi bana bir sorguyu nasıl uygulayabileceğim konusunda doğru yönde işaret edebilir mi? –

+0

Ember Data, kendisine verilen nesneyi sunucuya URL parametreleri biçiminde iletir. Sorguları desteklemek istiyorsanız, sunucunuzun kullandığınız sorgu parametrelerini temel alarak yanıtını değiştirmesini sağlamanız gerekir. – rpowell

30

Ben, ancak DS.Store dan (Kor Veri 1.0.beta.1 sonra yeni bir yol) uzatmadan David Lai yanıtını kullanarak belirtilen hatayı çözmek başardı:

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

Bu yüzden, bütünleştirme test paketinin neden çalışmadığının bu olduğunu öğrenmek için beni sonsuza kadar götürdüm. – shredding