如何重定向到模板,从Ember中的JSON请求重新加载页面内容
我希望转换到模板,但通过JSON请求重新加载页面内容 换句话说,我首先通过如何重定向到模板,从Ember中的JSON请求重新加载页面内容,json,ember.js,getjson,ember-router,Json,Ember.js,Getjson,Ember Router,我希望转换到模板,但通过JSON请求重新加载页面内容 换句话说,我首先通过getJSON请求加载索引模板,然后转到另一个模板,在那里修改一些数据。稍后,我想使用相同的getJSON请求通过操作处理程序返回初始模板(它将返回和第一个不同的另一个数据) App.IndexRoute=Ember.Route.extend({ 模型:函数(){ 返回$.getJSON(“myurl”); }, 行动:{ goto:function(){ $.getJSON(“myurl”); 这个。转换到(‘索引’);
getJSON
请求加载索引模板,然后转到另一个模板,在那里修改一些数据。稍后,我想使用相同的getJSON
请求通过操作处理程序返回初始模板(它将返回和第一个不同的另一个数据)
App.IndexRoute=Ember.Route.extend({
模型:函数(){
返回$.getJSON(“myurl”);
},
行动:{
goto:function(){
$.getJSON(“myurl”);
这个。转换到(‘索引’);
}
}
});
我可以转换到我的模板并执行新的JSON请求,但我看到的数据是初始数据。这仅在我单击F5
时有效,因为ember使用来自model函数的第一个getJSON
调用呈现模板
编辑:
我已经找到了一个解决方案,但我想知道是否还有更好的解决方案,而无需重新加载页面
App.IndexRoute=Ember.Route.extend({
模型:函数(){
返回$.getJSON(“myurl”);
},
行动:{
goto:function(){
this.transitiono('index')。然后(function(){location.reload(true)});
}
}
});
提前感谢 你能测试一下吗
App.IndexRoute = Ember.Route.extend({
model: function() {
return $.getJSON("myurl");
},
actions: {
goto: function(){
var newModel = $.getJSON("myurl"),
that = this;
newModel.then(function(model){
that.transitionTo('index',model);
});
}
}
});
也许您可以使用控制器并手动设置模型,然后使用函数this.controllerFor('index').set('model',model) 这接近正确答案 如果路线已渲染到显示,则Ember将取消转换,因此
this.transitionTo('index');
不是真的开火。这就是你的问题所在。(可能值得为您的应用程序打开ember debug,以将状态转换输出到控制台,这将显示此转换正在终止)
如果您确实希望在路由中修改模型,我将直接在该路由控制器的操作处理程序中进行修改:
App.IndexController = Ember.ObjectController.extend({
actions: {
goto: function(){
this.set('model', $.getJSON('myurl'));
}
}
});
错误
对象没有我用that=this
和that解决的方法“transitiono”
。transitiono
获取另一个错误<代码>传递的上下文对象比路由的动态段多。我用该变量编辑了答案,抱歉。对$.getJSON(“myurl”)的响应如何;这个JSON响应没有关联的模型,但它看起来像[{“attr1”{“id”:“val1”,“attr2”:“val2”},“attr3”:val3},{“attr1”{“id”:“val1”,“attr2”:“val2”},“attr3”:val3}
。也许您可以在中使用控制器并手动设置模型,然后在函数This.controllerFor('index')。set('model',model)你的确切意思是什么?;)顺便说一句,我标准化了JSON响应,现在我没有收到任何错误,尽管我的模板仍然呈现初始数据,而不是新数据。我已经解决了这个问题,但谢谢你的回答!