Ember。更改内容数组后选择视图不更新

时间:2014-08-28 07:58:24

标签: javascript ember.js handlebars.js

我尝试使用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内容永远不会更改

1 个答案:

答案 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