通过动作实时更新Ember模型

时间:2016-04-03 15:08:21

标签: ajax ember.js

我是Ember.js的新手并且在一项简单的任务上继续奋斗。我的目标是在触发操作后实现页面内容的实时更新。在这种情况下,关于路径 - 控制器 - 模型关系的Ember逻辑,我很遗憾。

所以我的template.hbs就像:

<h1>{{model.somedata}}</h1>
<button {{action 'getContent'}}>Get Content</button>

我的控制器接受来自用户表单的一些参数并进行AJAX调用:

export default Ember.Controller.extend({
    somedata: 'hello',
    actions: {
        getContent: function () {
            var self = this;

            Ember.$.ajax({

                // ... standart call with some query data

                success: function(result) {
                    self.set('somedata', result);
                } 
            });
        }
    }
});

我的路径模型仅返回控制器参数,因此如果我在控制器属性更新时正确,则必须有一个简单的步骤来更新当前模型并显示对模板的所有更改。

export default Ember.Route.extend({
    model: function(params) {
        return params;
    }
});

你们能否告诉我这个过程是如何定期在Ember中建立的?

3 个答案:

答案 0 :(得分:1)

是的,这有点令人困惑,这就是我对它的看法......

First Ember建立路线。

该路线有多个挂钩,用于获取和处理模型(即beforeModel,model,afterModel)。 Ember将始终将这些视为其自然观念的一部分。

还有一个setupController挂钩,将在所有模型挂钩后触发。作为setupController挂钩的一部分,将创建控制器并将模型传递给控制器​​。

一旦发生这种情况,我发现有必要将模型视为不再是路线的一部分,而是控制器。

答案 1 :(得分:1)

您正在寻找self.set('model.somedata', results)

您现在的代码是在控制器上设置somedata属性,这不会对任何事情产生影响。

答案 2 :(得分:0)

将弃用控制器。所以IMO 不使用控制器

处理您路线中的行动。如果将值绑定到模型钩子返回的对象,则在更新值时将更新数据和页面。

export default Ember.Route.extend({
    somedata: null,
    model: function(params) {
        return { 
           params: params,
           somedata: this.get('somedata')
        };
    },
    actions: {
        getContent: function () {
            ...
            var _this = this;
            ...
            success: function(result) {
                _this.set('somedata', result);
            } 
        }
    }
});