【问题标题】:how to use ember.js for accessing data through rest adapter and pass it to template如何使用 ember.js 通过 rest 适配器访问数据并将其传递给模板
【发布时间】:2015-01-01 08:18:06
【问题描述】:

我最近开始学习 ember.js 并且在 rest 适配器中遇到了一些问题。 我的代码是这样的

   App = Ember.Application.create();

App.Router.map(function() {
  this.resource('about');
  this.resource('posts');
  });

App.Posts = DS.Model.extend({
  response: DS.attr('string')
});  


App.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.RESTAdapter.create({
  namespace: '89/gz/connectweb/timeliner/js/data.json',
    host: 'http://local_env.mhhe.com'
  })
});

App.PostsRoute = Ember.Route.extend({
model: function (posts) {
  var jsondata =  this.store.find(posts);

    return jsondata;
  }


});

App.PostsView = Ember.View.extend({
  didInsertElement : function(){
   // this._super();
    var jsondata = $('#restdata').html();   
    var s_date = jsondata.split("</script>");
    var final_data = s_date[1].split("<script");    
    var jsonarray = JSON.parse(final_data[0]);
    console.log(jsonarray);
    timeLineData(jsonarray)
    // perform your jQuery logic here
  }
});

我已按代码编辑。在此,如果我通过检查元素进行检查,我可以成功地输入 url 并获取数据作为响应,但现在这些数据没有在路由中被访问。 我只想知道这里有什么问题。

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案1】:

    我在这里看到的第一个问题是您的适配器配置。当您使用当前配置调用this.store.find('post'); 时,它将调用:

    http://local_env.mhhe.com/89/gz/connectweb/timeliner/js/data.json/posts

    似乎您没有遵循expected format 的restfull 后端,因此您最好只使用jquery 而不是Ember Data:

    App.PostsRoute = Ember.Route.extend({
      model: function() {
        return Ember.$.getJSON('/89/gz/connectweb/timeliner/js/data.json');
      }
    });
    

    其次,我不明白你想在视图中做什么。从服务返回的数据,已经在控制器中可用,你应该可以使用它directly on the template

    // views/posts.hbs
    <ul>
      {{#each}}
        <li>{{title}}</li>
      {{/each}}
    </ul>
    

    【讨论】:

    • 实际上我可以按照您回答的方式访问数据,但我正在尝试学习休息适配器,我想知道如何做到这一点。我只想知道如何访问休息路由中的适配器响应。如果我遗漏了一些方法,请告诉我。
    • 嘿,你能告诉我如何定期调用这条路线吗?在正常的 ajax 调用中,我使用 settimeout 函数来调用包含此 ajax 调用的方法,但如何调用路由?
    • @RanjeetSIngh 看看这个答案stackoverflow.com/questions/21708931/…
    【解决方案2】:

    Ember 需要 json 格式的数据 specific format
    给定以下模型:

    App.Post = DS.Model.extend({
      title:    DS.attr(),
      comments: DS.hasMany('comment'),
      user:     DS.belongsTo('user')
    });
    
    App.Comment = DS.Model.extend({
      body: DS.attr()
    });
    

    Ember Data 预计对 /posts/1 的 GET 请求将返回以下格式的 JSON:

    {
      "post": {
        "id": 1,
        "title": "Rails is omakase",
        "comments": ["1", "2"],
        "user" : "dhh"
      },
    
      "comments": [{
        "id": "1",
        "body": "Rails is unagi"
      }, {
        "id": "2",
        "body": "Omakase O_o"
      }]
    }
    

    如果您的数据不是这种格式(从您的代码看起来不是这种格式),那么您需要对其进行格式化。您可以了解如何做到这一点here
    或者,您可以考虑使用没有 ember 数据的 ember,例如 blog post

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 2019-08-30
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2019-03-26
      • 1970-01-01
      相关资源
      最近更新 更多