0

我正面临动态分段路由器 v2 的问题。这是 js 的链接“ http://jsfiddle.net/q9zvU/5/ ”。

var App = Ember.Application.create();
App.deferReadiness();

App.ApplicationView = Ember.View.extend({
    templateName: 'campaign-app'
})
App.Router.map(function(match) {
    this.route('campaigns', {path: '/:type'})
})


App.CampaignsRoute = Ember.Route.extend({
    model: function() {
        alert('called model method');
        var data;
        $.ajax({
            url: '/echo/json/',
            async: false,
            data: {
                json: JSON.encode([{
                   name: 'Campaign 1',
                   type: 'scheduled'
                }, {
                   name: 'Campaign 2',
                   type: 'scheduled'
                }, {
                   name: 'Campaign 2',
                   type: 'draft'
                }])
            },
            dataType: 'json', 
            success: function(json) {
                alert(JSON.stringify(json));
                data = json;
            }
        })
        return data;
    },
    renderTemplate: function() {
        this.render({outlet: 'campaigns'});
    }
})
App.CampaignsView = Ember.CollectionView.extend({
    itemViewClass: Ember.View.extend({
        templateName: 'campaigns'
    })
})
App.advanceReadiness();

路由的模型方法不是用linkTo 和transitionTo 调用的。(在 ember 的文档中有明确说明)。但就我而言,我真的需要一点才能从路由中的 ajax 请求中加载数据。

谢谢,林恩

4

1 回答 1

0

模型挂钩上的 Ember 文档:

“你可以实现一个钩子,将 URL 转换为这条路由的模型。”

所以模型钩子只是在页面刷新时被调用。但这让很多人感到困惑:-)。因此,在这种情况下,这不是正确的钩子。我认为您应该在这种情况下使用 setupController 挂钩。尝试这个:

App.CampaignsRoute = Ember.Route.extend({
    setupController: function(controller) {
        alert('called setupController method');
        var data;
        $.ajax({
            url: '/echo/json/',
            async: false,
            data: {
                json: JSON.encode([{
                   name: 'Campaign 1',
                   type: 'scheduled'
                }, {
                   name: 'Campaign 2',
                   type: 'scheduled'
                }, {
                   name: 'Campaign 2',
                   type: 'draft'
                }])
            },
            dataType: 'json', 
            success: function(json) {
                alert(JSON.stringify(json));
                data = json;
            }
        });
        controller.set("model",data);
    }
});

一点额外说明:不将对象包装在 Ember.Object 中似乎很尴尬。通常你不会在普通的 JS 对象上工作。

于 2013-05-05T17:10:36.560 回答