Emberjs路线模型与视图

时间:2014-03-05 13:17:59

标签: ember.js

我的应用程序有一个页面,我正在使用该视图显示来自其他模板的数据,我的视图如下:

<script type="text/x-handlebars" data-template-name="enquiry">
        [...] // some other information display before
    {{view App.EnquirySelectedVehicleView}}
</script>

<script type="text/x-handlebars" data-template-name="selectedVehicle">
    // Here is my content
</script>

我的地图如下所示:

this.resource('enquiry', { path: '/enquiry/:enquiry_id'}, function() {
    this.route('selectedVehicle');
});

阅读文档后,我在我的观点中做了这个:

App.EnquirySelectedVehicleView = Ember.View.extend({
    templateName: 'selectedVehicle'
});

到目前为止一直很好,它显示了我模板中的文字。但我需要自动从此模板(selectedVehicle)中的ajax调用返回数据,就像它在/ inquiry / 1 /上时获取数据一样。

我在路由器中完成了这个:

App.EnquirySelectedVehicle = Ember.Object.extend({});

App.EnquirySelectedVehicleRoute = Ember.Route.extend({
    model: function() {
        console.log('DEBUG: SelectedVehicle Model');
        App.SelectedVehicle.vehicleStock(this)
    }
});

App.EnquirySelectedVehicle.reopenClass({
    vehicleStock: function(that) {
        console.log('DEBUG: Fetch vehicle stock');
        // Here come the ajax call
    }
});

但我的问题是路由永远不会调用..当我在视图模板中的/ inquiry / 1页面上时,如何从selectedVehicleRoute中返回一些值? (不确定我是否正确提问)

感谢您的帮助!

[编辑]

@Fanta:我想我开始明白我该怎么做了:

App.EnquiryRoute = Ember.Route.extend({
    beforeModel: function(transition) {
        this.controllerFor('login').send('isSession', transition);
    },
    model: function(param) {
        var promise = new Ember.RSVP.Promise(function(resolve, reject) {
            var modelData = {enquiry: {}, vehicleStock: {}};
            Ember.$
            .get(host + '/enquiry/' + param['enquiry_id'], function(data) {
                console.log('DEBUG: Enquriry GET OK id = ' + param['enquiry_id']);
                modelData.enquiry = data.enquiry;
                Ember.$.get(host + '/vehiclestock/' + data.enquiry.VehicleStockId, function(data) {
                    console.log('DEBUG: VehicleStock GET OK id = ' + data.enquiry.VehicleStockId)
                    console.log(data);
                    modelData.vehicleStock = data.vehicleStock;
                    resolve(modelData);
                });
            });
        });
        return promise;
    }
});

它似乎有效,现在我必须弄清楚如何显示我的对象:)但是谢谢你的帮助,这实际上让我以不同的方式解决它!

1 个答案:

答案 0 :(得分:1)

为了将来参考,只需转到https://github.com/emberjs/ember.js/blob/master/CONTRIBUTING.md,您将看到两个链接,一个链接到JSFiddle,一个链接到JSBin,基本设置。

你确定这条路线没有被叫到吗?我创建了一个小提琴,http://jsfiddle.net/NQKvy/817/如果你检查JS控制台,你会在日志中看到:

DEBUG: SelectedVehicle Model
DEBUG: Fetch vehicle stock