如何在Ember.js中将内容与JSON绑定

Pri*_*nca 5 ember.js

所有示例都在arraycontroller.content中使用固定数据源,而我使用的是动态数据源,它是从另一个Web服务生成并返回一个JSON,它不会创建我在Ember中声明的对象,这里是代码样品:

        ET.AppYear = Ember.Object.extend({
            text:null,
            value:null
        });
        ET.EmailTypes = Ember.Object.extend();

        ET.appYearController = Ember.ArrayController.create({
            content: [],
            loadYears: function (year) {
                if (year != null) {
                    for (var i = -5; i < 5; i++) {
                        this.pushObject({ text: year + i, value: year + i });
                       //.AppYear.create({ text: year + i, value: year + i });
                    }
                }
            }
        });

        ET.selectedAppYearController = Ember.Object.create({
            selectedAppYear: '2011',
            alertChange: function(){
                alert("selected App Year is now " + this.get('selectedAppYear'));
            }.observes('selectedAppYear'),
            isChanged: function () {
                if (this.appYear != null) {
                    this.set('selection',this.get('content'));
                    //LoadETByAppYearETTypeID(this.selectedAppYear, ET.selectedEmailTypesController.emailType.email_template_type_id);
                }
            } .observes('selectedAppYear'),
            AppYear: function() {
                var ay = ET.appYearController.findProperty('text',this.get('selectedAppYear'));
                return ay;
            }.property('selectedAppYear')                
        });
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我将ET.appYearController.loadYears在AJAX帖子中调用(JSON),它将通过使用创建内容this.pushObject,但这不是ET.AppYear对象模式,而我调用时ET.selectedAppYearController.selectedAppYear,它返回一个未定义的对象,它真正返回一个对象{text:xx,value,xx}架构.这就是为什么selectionBinding在这种情况下也不会起作用的原因.

那么将JSON元素作为定义对象导入并放入内容的典型解决方案是什么?!

lim*_*ist 7

看看Ember数据库,它是为您的用例和相关用例而制作的:

https://github.com/emberjs/data


Dan*_*rdt 5

[2014-02-19:已弃用 - 我不再支持余烬,因为它过于简单化,并建议在大多数余烬项目中使用余烬数据.查看Ember指南,了解余烬数据以及此示例项目的概述]

我已经创建了一个非常简单的库来处理来自Ember的REST接口:https: //github.com/cerebris/ember-rest

我还写了一些关于在Rails中使用这个库的帖子.第一个是:http: //www.cerebris.com/blog/2012/01/24/beginning-ember-js-on-rails-part-1/

我的下一篇文章,希望今天晚些时候发布,准确处理通过AJAX将数据加载到Ember对象的集合中.现在,您可以在示例应用程序以及ember-rest.js自述文件中看到此行为.

如果您想避免使用此lib,您可能仍希望查看源代码.该deserialize()方法在Ember.Resource用于导入JSON和也可以用一个通用的使用Ember.Object.