【问题标题】:Emberjs route model with viewEmberjs 带视图的路由模型
【发布时间】:2014-03-05 13:17:58
【问题描述】:

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

<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 调用返回数据,就像它在 /enquiry/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
    }
});

但我的问题是该路线永远不会被调用。当我在视图模板的 /enquiry/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;
    }
});

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

【问题讨论】:

  • 检查文档emberjs.com/guides/routing/defining-your-routes 如果你检查,你会发现你的路线应该类似于 App.EnquirySelectedVehicleRoute
  • 我已经编辑了主题以进行此修改,但它仍然是一样的,没有任何东西触发路由器..
  • 用您的代码创建一个小提琴,这对我们来说更容易提供帮助。
  • 我从来没有设法用 ember 制作小提琴...jsfiddle.net/tJK8V/1我不知道这是否有帮助,抱歉...

标签: ember.js


【解决方案1】:

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

你确定没有调用路由吗?我创建了一个 Fiddle,http://jsfiddle.net/NQKvy/817/ 如果你检查 JS 控制台,你会在日志中看到:

DEBUG: SelectedVehicle Model
DEBUG: Fetch vehicle stock

【讨论】:

  • 我 100% 确定我的路线没有被调用。但是在您的 Fiddle 中,您正在重定向到 enquiry.selectedVehicle。但我从来没有到达我的网址,因为我总是在查询/id。我想在我的查询中显示来自这个模板的数据,但我需要从我的服务器获取一些数据。
  • 好的,所以,用我给你的小提琴,放更多你的代码,看看你是怎么做的。
  • jsfiddle.net/NQKvy/818 我已经放了大部分代码。为了快速解释它,我有一个查询列表,我使用 YUI 来显示它。我使用 didInsertElement 捕获单击事件以触发我的控制器并将我重定向到 /enquiry/id 处的正确查询。在我的页面查询/ID 上,我想显示一些来自不同 ajax 调用但在一页中的信息。这就是为什么我想使用视图来显示它。
  • 你想用那个代码做什么?显示该查询的库存车辆清单?如果这就是你想要的,那么,你为什么不在询价和库存车辆之间建立一个关系呢?并遍历它们?那就是如果你使用 Ember 数据,如果你不是,那么......在某处创建一个方法,也许在“查询”模型中,它将从 Ajax 调用中检索“车辆”,并返回一个承诺,这样,当 promise 被解决时,模板将被填充。
  • 我的意思是,只需将 vehicleStock 方法移至您的 Inquiry 模型,然后循环遍历结果,这就是您想要的,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多