0

如果我错了,请纠正我,但我认为 Ember 应该为你的大部分模型 - 视图绑定?当您必须手动跟踪模型更改并相应地更新/刷新视图时会发生什么情况?

我正在使用的应用程序具有与之关联的嵌套路由和模型。

App.Router.map(function() {
    this.resource('exams', {path: "/exams"}, function() {
        this.resource('exam', {path: ":exam_id"}, function(){
            this.resource('questions', {path: "/questions"}, function() {
                this.route("question", {path: ":question_id" });
                this.route("new");
            })
        })
    });
});

一切正常,我可以与其他服务器分开获得考试和问题。

对于每个模型,我都有适当的Ember.ArrayControllerEmber.ObjectController处理视图中的列表和单个模型项。基本上对于这两种模型,我处理事物的方式是相同的,除了一个嵌套在另一个中。另一个区别是,为了显示嵌套路由数据,我使用了另一个 {{outlet}} - 第一个模板内的那个。

现在的问题是,顶层模型绑定到视图是由 Ember 自动处理的,没有任何特殊的观察者、绑定等。 - 例如,当我添加新项目时,它会被保存并刷新列表视图以反映更改或当项目被删除它会自动从视图中删除。“它只是工作(c)”

另一方面,对于第二个模型(问题),我能够重现所有的 crud 行为并且工作正常,但 UI 不会自动更新以反映更改。

例如,在添加新条目时我不得不这样做(有问题的行有评论):

App.QuestionsController = Ember.ArrayController.extend({
    needs: ['exam'],
    actions: {
        create: function () {
            var exam_id = this.get('controllers.exam.id')
            var title = this.get('newQuestion');
            if (!title.trim()) { return; }
            var item = this.store.createRecord('question', {
                title: title,
                exam_id: exam_id
            });
            item.save();
            this.set('newQuestion', '');
            this.get('content').pushObject(item); // <-- this somehow important to update the UI
        }
    }
});

而它是为我处理的(考试模型)

我究竟做错了什么?如何让 Ember.js 跟踪和绑定模型并为我更改 UI?

4

1 回答 1

0

this.get('content').pushObject(item);

您将新问题推送到问题控制器数组。我认为如果您将新问题直接推送到考试 has_many 关系会更好。

exam = this.modelFor('exam');
exam.get('questions').pushObject(item);
于 2013-10-21T16:45:44.867 回答