【问题标题】:How to redirect to a template reloading the page content from a JSON request in Ember如何重定向到模板从 Ember 中的 JSON 请求重新加载页面内容
【发布时间】:2013-11-15 08:00:44
【问题描述】:

我想转换为模板,但通过 JSON 请求重新加载页面内容。

换句话说,我最初通过getJSON 请求加载我的索引模板,然后我转到另一个模板来修改一些数据。稍后,我想通过具有相同 getJSON 请求的操作处理程序返回到我的初始模板(它将返回与第一个不同的另一个数据)。

App.IndexRoute = Ember.Route.extend({
    model: function() {
        return $.getJSON("myurl");
    },
    actions: {
        goto: function(){
            $.getJSON("myurl");
            this.transitionTo('index');
        }
    }
});

我能够转换到我的模板并执行新的 JSON 请求,但我看到的数据是初始数据。这仅在我单击 F5 时有效,因为 ember 使用模型函数的第一个 getJSON 调用呈现模板。

编辑:

我已经找到了一个解决方案,但我想知道是否还有另一个更好的解决方案,而无需重新加载页面。

App.IndexRoute = Ember.Route.extend({
    model: function() {
        return $.getJSON("myurl");
    },
    actions: {
        goto: function(){
            this.transitionTo('index').then(function(){location.reload(true)});
        }
    }
});

提前致谢!

【问题讨论】:

    标签: json ember.js getjson ember-router


    【解决方案1】:

    你能测试一下吗?

    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);
                });
            }
        }
    });
    

    【讨论】:

    • 错误Object has no method 'transitionTo' 我用that=thisthat.transitionTo 解决了另一个错误...More context objects were passed than there are dynamic segments for the route
    • 我用那个 var 编辑了答案,对不起。 $.getJSON("myurl"); 的响应如何
    • 此 JSON 响应没有关联模型,但看起来像 [{"attr1"{"id":"val1","attr2":"val2"},"attr3":val3}, ... {"attr1"{"id":"val1","attr2":"val2"},"attr3":val3}
    • 也许你可以拿控制器手动设置模型,在then函数this.controllerFor('index').set('model',model)
    • 你到底是什么意思? ;) 顺便说一句,我标准化了我的 JSON 响应,现在我没有收到任何错误,尽管我的模板仍然呈现初始数据而不是新数据。
    【解决方案2】:

    也许你可以拿控制器手动设置模型,在 then 函数 this.controllerFor('index').set('model',model)

    这接近正确答案。

    如果路线已经渲染到显示器,Ember 将取消转换,所以你的

    this.transitionTo('index');
    

    实际上并没有开火。这就是你的问题的根源。 (为您的应用打开 ember 调试以将状态转换输出到控制台可能是值得的,这将表明它正在被终止)。

    如果您确实想在路由中修改模型,我会直接在该路由控制器的操作处理程序中进行:

    App.IndexController = Ember.ObjectController.extend({
        actions: {
            goto: function(){
                this.set('model', $.getJSON('myurl'));
            }
        }
    });
    

    【讨论】:

    • 我已经解决了这个问题,但谢谢你的回答!
    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2016-10-28
    • 2020-09-06
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多