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

Posted

技术标签:

【中文标题】Ember.js 不会自动绑定模型 RESTful 更改【英文标题】:Ember.js does not auto bind model RESTful changes 【发布时间】:2013-10-21 10:37:03 【问题描述】:

如果我错了,请纠正我,但我认为 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?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于Ember.js 不会自动绑定模型 RESTful 更改的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Angular.js 或 Ember.js 的 Spring RESTful Web 服务

如何在 Ember.js 中保存具有“日期”类型属性的模型?

Ember.js入门教程博文汇总

ember.js 和服务器

Ember.js - 将 ember-cli-mirage 用于假模型时未找到模型

Ember.JS - 无法根据计算属性进行过滤或过滤