我尝试使用EmberJS更新把手模板,但我想知道该怎么做
这是我的JavaScript文件中的代码段。
App.selectedCoreController = Ember.Object.create({
content: null
});
App.FieldsController = Ember.ArrayController.extend({
fields: [],
active: function() {
if (App.selectedCoreController.content) {
console.log(App.selectedCoreController.content)
var fields =[];
Ember.RSVP.Promise.cast(Ember.$.getJSON('/ALL/' + App.selectedCoreController.content))
.then(undefined, function() {
return null;
})
.then(function(response) {
console.log(response);
return response.fields.map(function(d){
return d.name;
});
});
} else {
return null;
}
}.property("App.selectedCoreController.content").cacheable()});
App.fieldsController = App.FieldsController.create();
这是Handlebars脚本的一部分
{{view App.Select contentBinding =App.arrays.cores
selectionBinding = "App.selectedCoreController.content"}}
{{view App.Select contentBinding = "App.fieldsController.active"}}
激活活动函数后,关于App.fieldsController.active的Ember.Select内容永远不会更改
答案 0 :(得分:1)
经过深入搜索,我找到了解决方案。
问题是返回的数组在Ember.RSVP.Promise内 这就是为什么Ember.Select没有检测到数组中的变化的原因。 动作功能的正确实现如下:
active: function() {
if (App.selectedCoreController.content) {
Ember.RSVP.Promise.cast(Ember.$.getJSON('/ALL/' + App.selectedCoreController.content))
.then(undefined, function() {
return null;
})
.then(function(response) {
App.FieldsController.fields = response.fields.map(function(d) {
return d.name;
});
});
console.log(App.FieldsController.fields);
return App.FieldsController.fields;
} else {
return null;
}
}.property("App.selectedCoreController.content").cacheable()
这是详细的solution