所有示例都在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元素作为定义对象导入并放入内容的典型解决方案是什么?!
答案 0 :(得分:7)
看看Ember数据库,它是为你的用例和相关用例而制作的:
答案 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
一起使用。