在我的webapp中,我有一个模型,其属性的名称是根据服务器的数据动态生成的。例如,我通常会通过我的控制器执行类似的操作来引用它:
var str1 = 'property.name.with.dots'; // String from server
this.get('model.someProperty')[str1].integer = 2;
this.get('model.someProperty')[str1].integer += 1;
但是Ember并不喜欢这样 - 它说我应该使用set
或get
功能。这是有道理的。所以我想做一些这样的事情来取代上面的最后一行:
this.get('model.someProperty.' + str1).incrementProperty('integer');
如果str1
没有点,这可以很好地开箱即用。但是,确实如此,我能做些什么来让Ember的吸气者工作?我试过了
this.get('model.someProperty')[str1].incrementProperty('integer');
但它不起作用 - 默认情况下,子对象无法获得Ember的方法。
答案 0 :(得分:1)
绝对
在将数据交给Ember之前按下数据,在你的名字中加上点会导致过多的链接问题。
App.cleanData = function(result){
var response = {},
re = new RegExp('\\.', 'g'),
newKey;
for(var key in result){
newKey = key.replace(re, '_');
response[newKey] = result[key];
}
return response;
};
App.FooRoute = Em.Route.extend({
model: function(){
return $.getJSON('/foo').then(function(result){
return App.cleanData(result);
}
}
});