所有示例都在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元素作为定义对象导入并放入内容的典型解决方案是什么?!
[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.
| 归档时间: |
|
| 查看次数: |
8241 次 |
| 最近记录: |