Ember-data:在控制器/视图中使用模型

时间:2014-02-04 09:55:29

标签: google-maps model-view-controller ember.js ember-data dc.js

我无法理解如何在视图和控制器中使用ember-data模型。我正在使用 emberjs 1.2.0 + ember-data 1.0.0-beta.2 编写应用程序。我为自己的(疯狂)API编写了自己的自定义RESTAdapter和Serializer。一切似乎都很好 - >我可以在我的模板中使用模型的数据等等。

我将尝试解释应用程序的基本功能。例如,我有 UserModel 与用户集合,而不是我有一个用户列表和用户详细信息的模板,您可以在其中编辑配置文件等。那里的一切都很干净。 然后我有另一个模型调用位置,其中最后一个位置与用户相关联。这个模型我在我的模板中使用谷歌地图,我需要使用这个模型(在我的mapView中)在地图中创建注释。另一个例子是reportModel,其中包含用户活动的日期统计信息。这个模型我需要用这些统计数据构建dc.js图表​​。没有ember-data,我基本上在Route的模型钩子中设置ajaxRequest,而不是在控制器或视图中设置get数据。我正在尝试使用ember-data作为app的其余部分,但是当get('model')返回DS.Model的类时,我真的不知道如何在View或控制器中获取模型的数据。

一点点代码:

App.DashboardRoute = App.AuthenticatedRoute.extend({
    model: function() {
        return this.store.find('daystat');
    },
    setupController: function(controller, model) {
        controller.set('content', model);
    }
});

App.DashboardView = Ember.View.extend({
    didInsertElement: function() {

        // load model from controller
        var model = this.get('controller.content');

        console.log(model);
    }
});

控制台登录仪表板路线:

Class
__ember1391503821834: "ember608"
__ember1391503821834_meta: Meta
_oldWillDestroy: function superWrapper() {
_super: undefined
arrangedContent: (...)
content: (...)
get content: function () {
set content: function (value) {
isLoaded: true
isUpdating: false
store: Class
toString: function () { return ret; }
type: App.Daystat
willDestroy: function superWrapper() {
__proto__: Object

在使用数据推送api响应之前重新启动序列化程序日志我想在仪表板视图中使用它:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, nextObject: function, firstObject: undefined, lastObject: undefined, contains: function,  getEach: function…]

单个对象(日期)包含如下内容:

date: "2014-01-18"
id: 4
orders_count: 0
orders_sum: 0
sales_count: 0
sales_sum: 0
visits_count: 0
__proto__: Object

我的问题是:如何在我的视图或控制器中使用Ember-Data Models,就像我在手柄模板中一样?

1 个答案:

答案 0 :(得分:1)

好的,经过谷歌搜索和测试一段时间后,我对解决方案有了基本的了解:

首先,这可能有助于处理类似问题的任何人: Ember: How to set controller model for use in select view

在我的观点中,我正在处理集合,所以我只是做了一些日志测试,自定义应用程序代码,如下所示:

App.MapController = Ember.ArrayController.extend({
    getLocations: function() {
        var model = this.get('content');

        model.forEach(function(item) {
            console.log(item.get('id'));
        });
    }
});

App.MapView = Ember.ContainerView.extend({

    elementId: 'map-canvas',
    tagName: 'div',

    attributeBindings: ['style'],

    map: null,

    didInsertElement: function() {
        var mapOptions = {
            center: new google.maps.LatLng(49.678293, 15.446777),
            zoom: 8,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(this.$().get(0),mapOptions);
        this.set("map",map);

        // Get controller
        var controller = this.get('controller');

        controller.getLocations();
    }
});

记录返回ID:

2 combined-scripts.js:357
3 combined-scripts.js:357
...

所以是的,你可以通过在每个属性上使用get方法来获得它。