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

时间:2012-01-26 15:35:37

标签: 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')                
        });

如您所见,我将在AJAX回复中调用ET.appYearController.loadYears(JSON),这将使用this.pushObject创建内容,但这不是ET.AppYear对象模式,当我调用ET.selectedAppYearController.selectedAppYear时,它返回一个未定义的对象,它真正返回一个带有{text:xx,value,xx}模式的对象。这就是selectionBinding在这种情况下也不起作用的原因。

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

2 个答案:

答案 0 :(得分:7)

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

https://github.com/emberjs/data

答案 1 :(得分:5)

[2014-02-19:已弃用 - 我不再支持余烬,因为它过于简单化,并建议在大多数ember项目中使用ember-data。查看the Ember guides以获取有关余烬数据的概述以及此example project]

我创建了一个非常简单的库来处理来自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一起使用。