Ember.js 不会自动绑定模型 REST 更改

Ember.js does not auto bind model RESTful changes

本文关键字:绑定 模型 REST 更改 js Ember      更新时间:2023-09-26

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

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

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?

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

您将新问题推送到问题控制器阵列。我认为最好将新问题直接推送到考试has_many关系中。

exam = this.modelFor('exam');
exam.get('questions').pushObject(item);