【问题标题】:rendering data from ajax request not made in model function模型函数中未生成来自 ajax 请求的渲染数据
【发布时间】:2014-12-23 01:10:08
【问题描述】:

我正在制作一个简单的应用程序,在该应用程序中我一遍又一遍地进行相同的 ajax 调用(使用 setInterval),它不是由用户进入路线触发的,而是通过单击触发 setInterval 开始的按钮来触发的.因此,我不会使用通过移动到路由中触发的 model 挂钩来获取数据,因为该挂钩仅被调用一次,然后模板会自动呈现。相反,我在控制器中有一个 jsonRequest 函数,该函数由 startInterval 函数一遍又一遍地调用。因此,模板中的数据不会像model 挂钩那样自动呈现。因此,一旦在每个 ajax 请求后返回我的数据,我希望将其附加到列表中,或者以某种方式将其添加到 index.html,但我找不到使用 Ember 的 api 执行此操作的方法。请求返回后如何向 index.html 中添加数据(我不想将其称为view,因为我还没有创建view)?

App.IndexController = Ember.Controller.extend({

      jsonRequest: function(){
        var datasource = 'http://localhost:8080';
        return new Ember.$.ajax({url: App.Index.url, dataType: "json", type: 'GET'}).then(function(data){  
              console.log(data)     

        })
      },
     startInterval: function(){
          console.log("startInterval");
         App.Index.setIntervalId = setInterval( this.jsonRequest, (1000));
     }


   App.Index = Ember.Object.extend({
    url: "",
    setIntervalId: "",

  });

   App.IndexRoute = Ember.Route.extend({

     model: function(){
       return App.Index.create();
   },

这里有一个 jsbin,显示了当我尝试将来自 ajax 调用的数据添加到索引控制器上的 objects 属性时引发的错误(如 SO 用户 Buck 所建议的那样)。 bin 没有显示在模板中循环遍历objects 的尝试,因为我们从来没有走到那一步http://emberjs.jsbin.com/bomilowiha/1/edit?html,css,js,console,output

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    您可以将收到的数据转换为 Ember.Object 并将其添加到控制器属性中。

    示例控制器代码:

    Ember.Controller.extend({
      objects: [],
      jsonRequest: function() {
         Ember.$.ajax({/* your request */}).then(function(data) {
           var object = /* code to turn the data into an object for display */;
           this.get('objects').pushObject(object);
         }.bind(this));
      }
    });
    

    然后在您的模板中,您可以遍历模型数组:

    {{#each object in objects}}
      display object properties here
    {{/each}}
    

    具体如何将 JSON 转为对象进行显示,以及如何显示该对象,取决于您的需求。

    【讨论】:

    • 这里的问题是我没有累积对象然后一次渲染它们(例如,通过遍历对象循环)。相反,一旦返回每个对象,我希望渲染它,然后对下一个对象执行相同的操作,因此使模型数组看起来不正确。我误解了你的回答吗?或者你能提出一些不同的建议吗?
    • 也许更重要的是,当我进入路线时,我已经创建了模型` App.IndexRoute = Ember.Route.extend({ model: function(){ return App.Index.create() ; },` 并且该模型不是数组,而是您在 OP 底部看到的 App.Index。
    • 如果向数组中添加新对象,它将自动呈现。模型有什么功能吗?您在帖子中为模型添加的代码似乎没有任何作用。
    • 我在表单中使用该模型来收集数据` {{input valueBinding="model.url" placeholder="blah"}} `。这样,当表单提交时,我可以设置 ajax 请求的 url,因为表单中的 url 附加到模型
    • 这是我以这种方式创建模型时遵循的逻辑(即帮助提交表单),这使它不可能?按照您的建议声明模型stackoverflow.com/questions/18309544/…
    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多