我正在制作一个简单的应用程序,我一遍又一遍地使用相同的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
答案 0 :(得分:0)
您可以将收到的数据转换为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转换为显示对象以及如何显示对象的细节取决于您的需求。