【问题标题】:How to use two adapter(LS and Rest adapter) to a model(Foo - ModelName), but route based access/use the adapter in ember.js application?如何将两个适配器(LS 和 Rest 适配器)用于模型(Foo - ModelName),但在 ember.js 应用程序中基于路由访问/使用适配器?
【发布时间】:2014-12-23 10:35:13
【问题描述】:

当我在第一页使用 LS 适配器到 Foo 模型时,我定义/提到了该 Foo 模型的 DS.LSAdapter 并将模型数据从数据库获取到本地存储。在我可以通过第一页中的本地存储适配器访问/管理模型数据之后。它在这里工作正常。

接下来我将导航到第二页,这个页面模型被定义/提到了用于 Foo 相同模型的 Rest Adapter。 Ember 不会在此处调用 REST API,因为问题是在第一页中启动了第一个 LS 适配器,而第二页没有为该 Foo 模型启动 REST 适配器。我们如何在不刷新页面的情况下在第二页启动其余的适配器到 Foo 模型?

请您提供解决方案。非常感谢。

型号

App.Foo = DS.Model.extend({     
id: DS.attr('id'),     
name: DS.attr('string')    
});

在首页提及本地存储适配器

控制器

App.FirstPageController = Ember.ObjectController.extend({

});

路线

App.FirstPageRoute = Ember.Route.extend({ 

    model: function() {  

        App.FooAdapter = DS.LSAdapter.extend({ namespace: 'ls-emberjs' });

        return this.store.find('foo');       

    }   

});

血红蛋白

<ul>
{{#each model}} 
    <li>fooID: {{id}} - Name: {{name}}</li>
{{/each}}
</ul>

在第二页提及 Rest Adapter

控制器

App.SecondPageController = Ember.ObjectController.extend({

});

路线

App.SecondPageRoute = Ember.Route.extend({  

    model: function() {  

        App.FooAdapter = DS.RESTAdapter.extend({});

        return this.store.find('foo');       

    }   

});

血红蛋白

<ul>
{{#each model}} 
    <li>fooID: {{id}} - Name: {{name}}</li>
{{/each}}
</ul>

谢谢

【问题讨论】:

  • 你的问题不清楚。如果您想要一个清晰而好的答案,请用更多代码提出一个很好的问题:)
  • 在上面添加了更多代码。请向我们提供您的解决方案/反馈。谢谢。

标签: ember.js ember-data


【解决方案1】:

好吧,我从这个问题中得出的结论是,基于“名称”的适配器推导仅在负载时起作用,所以我认为您将不得不尝试这样的事情来动态更改适配器。这是我第一次看到这个要求,而且 ember 文档也受到限制,所以这是一个试用版,我没有测试它:

App.FirstPageRoute = Ember.Route.extend({ 

model: function() {  

       var adapter = DS.RESTAdapter.extend({});
       this.set("store.adapter",adapter);
       return this.store.find('foo');       

    }   
});

App.SecondPageRoute = Ember.Route.extend({ 

model: function() {  

       var adapter = DS.LSAdapter.extend({ namespace: 'ls-emberjs' });
       this.set("store.adapter",adapter);
       return this.store.find('foo');       
    }   

});

如果 ember 团队的任何人有更好的解决方案...

附:我已经重新推了帖子,因为现在可以理解作者了...... :)

【讨论】:

  • 我用我的应用程序测试/检查了您的上述解决方案。它在这里不起作用,我收到一个错误“加载路由时:TypeError:undefined is not a function”。请 ember 团队为我们提供更好的解决方案。谢谢。
  • 你在哪一行得到了错误......我的哪个电话没有“定义”?
  • 此行代码在我的应用程序中出现未定义的错误。 "this.store.set("适配器",适配器);"
  • 我尝试使用直接设置,因为适配器是 store 的属性,作为文档中的状态:emberjs.com/api/data/classes/DS.Store.html#property_adapter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多