代码之家  ›  专栏  ›  技术社区  ›  Vinz243

Ember固定装置不工作

  •  1
  • Vinz243  · 技术社区  · 10 年前

    这是我的代码(使用ember-cli):

    app.coffee公司

    `import Ember from 'ember'`
    `import Resolver from 'ember/resolver'`
    `import loadInitializers from 'ember/load-initializers'`
    
    Ember.MODEL_FACTORY_INJECTIONS = true
    
    App = Ember.Application.extend
      modulePrefix: 'dashboard' # TODO: loaded via config
      Resolver: Resolver
    
    
    loadInitializers App, 'dashboard'
    
    `export default App`
    

    适配器/应用程序.咖啡

    `import DS from 'ember-data'`
    
    ApplicationAdapter = DS.FixtureAdapter.extend()
    
    `export default ApplicationAdapter`
    

    型号/mod.coffee

    `import DS from 'ember-data'`
    
    Mod = DS.Model.extend 
      name: DS.attr 'string'
      body: DS.attr 'string'
      summary: DS.attr 'string'
      category: DS.attr 'string'
    
    Mod.reopenClass {
      FIXTURES: [
        {
          id: 1
          name: "First mod"
          body: "..."
          summary: "..."
          category: "api"
        },
        {
          id: 2
          name: "Second mod"
          body: "..."
          summary: "..."
          category: "api"
        }
      ]
    }
    
    `export default Mod`
    

    但在应用程序中,我运行时不会抛出任何东西 ember serve 也不在浏览器conole中(输出:

    DEBUG: ------------------------------- vendor.js:27630
    DEBUG: Ember      : 1.7.0 vendor.js:27630
    DEBUG: Ember Data : 1.0.0-beta.8.2a68c63a vendor.js:27630
    DEBUG: Handlebars : 1.3.0 vendor.js:27630
    DEBUG: jQuery     : 1.11.1 vendor.js:27630
    DEBUG: ------------------------------- vendor.js:27630
    generated -> route:application Object {fullName: "route:application"} vendor.js:27630
    generated -> route:index Object {fullName: "route:index"} vendor.js:27630
    generated -> controller:application Object {fullName: "controller:application"} vendor.js:27630
    Rendering application with default view <dashboard@view:toplevel::ember323> Object {fullName: "view:application"} vendor.js:27630
    generated -> controller:index Object {fullName: "controller:index"} vendor.js:27630
    Rendering index with <dashboard@view:index::ember339> Object {fullName: "view:index"} vendor.js:27630
    Ember Debugger Active 
    

    )

    在烬检查器中,它显示了我的mod模型,但没有记录

    这是整个github回购 https://github.com/OpenCubes/dashboard/tree/temp

    2 回复  |  直到 10 年前
        1
  •  4
  •   Stefan Penner    10 年前

    好的2件事。

    首先,如果要获取整个集合,则必须生成路由。默认情况下,我们主动生成的路由不会这样做。我认为这只是与模糊性有关,我们不想意外获取整个数据源,所以我们让用户自行决定。

    // app/routes/mods.js
    import Ember from 'ember';
    export default Ember.Route.extend({
      model: function() { return this.store.find('mod'); }
    });
    

    第二,在提供夹具时,必须使用重新打开类。这是因为IE6+无法将静态/类变量正确传播给后代。因此,ember实现了自己的机制。在未来某个时间点 setPrototypeOf 将可用,我们可以推迟。在此之前,对于ember-cli应用程序,请使用embers认可的方式。

    import DS from 'ember-data';
    var Mod = DS.Model.extend({...})
    Mod.reopenClass({
      FIXTURES: [
      ...
      ]
    });
    export default Mod;
    

    那就行了

        2
  •  1
  •   MilkyWayJoe    10 年前

    使现代化

    嗨,我已经将代码转移到cli,基本上,我所要做的就是:

    为创建适配器 Mod :

    C:\>ember g adapter mod
    

    然后我找到了生成的 摩登派青年 适配器,并将声明更改为从 FixtureAdapter 而不是 RESTAdapter .

    import DS from 'ember-data';
    
    export default DS.FixtureAdapter.extend();
    

    而且,必须更改模型声明,现在它与您的几乎相同。 无需创建商店或任何东西。


    我真的不知道这是否是您遇到问题的原因,但是,您是否覆盖了商店中的适配器?我怀疑它可能没有使用您的适配器。

    我做了一个快速样本( here )可以作为参考。

    请注意,在下面的示例中,我将夹具适配器名称作为字符串传递给存储(也有其他方法)。

    App.ApplicationAdapter = DS.FixtureAdapter.extend();
    
    App.Store = DS.Store.extend({
      // override default adapter
      adapter: 'ApplicationAdapter'
    });
    
    [ ... other code ... ]
    
    App.Colour = DS.Model.extend({
      name: DS.attr('string'),
      hex: DS.attr('string')
    });
    
    // settings the fixtures directly in the model class
    App.Colour.FIXTURES = [
      {id: 1, name: 'red', hex: '#F00'}, 
      {id: 2, name: 'green', hex: '#0F0'},
      {id: 3, name: 'blue', hex: '#00F'}
    ];
    

    然后在我的路线中,我正常查询:

    App.IndexRoute = Ember.Route.extend({
      model: function() {
        return this.store.find('colour');
      } 
    });
    

    这将正常输出夹具记录。