【问题标题】:Embjers store.createRecord or store.push not updating viewEmbjers store.createRecord 或 store.push 不更新视图
【发布时间】:2015-05-20 18:35:10
【问题描述】:

我正在尝试创建新记录并将其推送到商店。我可以很好地坚持它(一旦我弄清楚这一点,我会在成功坚持后推送到商店),但是视图/模板没有被刷新。我知道持久性是有效的,因为如果我刷新整个页面,就会出现新记录。

我也尝试了 this.store.push(),但没有任何反应。我环顾四周,似乎每个人都在使用 filter() 但仅在父控制器中的子记录集上使用...

在此先感谢,我觉得它非常基本。

路线/项目

export default Ember.Route.extend({
    model: function(){
        return this.store.find('projects');
    }
});

控制器/项目

export default Ember.ArrayController.extend({
    actions: {
        createProject: function() {
            var title = this.get('newProjectTitle');
            var description = this.get('newProjectDescription');
            if (!title.trim()) { return; }

            // Create the new Project model
            var project = this.store.createRecord('project', {
                title: title,
                description: description
            });

            project.save();    
            this.set('newProjectTitle', '');
            this.set('newProjectDescription', '');
        }
    }
});

projects.hbs

<div class="form-group">
    {{input type="text" class="form-control" placeholder="title" value=newProjectTitle}}
    {{input type="text" class="form-control" placeholder="description" value=newProjectDescription action="createProject"}}
    </div>

    <button class="btn btn-xs btn-success" {{action 'createProject'}}>Create this Project</button>

    <ul class="list-group">
        {{#each project in model}}
            {{#link-to 'project' project}}
            <li class="list-group-item">
                {{project.id}} - {{project.title}}
            </li>
            {{/link-to}}
        {{/each}}
    </ul>

【问题讨论】:

    标签: ember.js view ember-data push


    【解决方案1】:

    您缺少设置控制器方法 -

    setupController: function(controller, model) {
        controller.set('model', model);
      }
    

    在 route/projects.js 文件中使用上述方法。 你的代码会像 -

    export default Ember.Route.extend({
        model: function(){
            return this.store.find('projects');
        }
    setupController: function(controller, model) {
            controller.set('model', model);
          }
    
    });
    

    您也可以参考此链接了解更多信息 -

    http://guides.emberjs.com/v1.10.0/routing/setting-up-a-controller/

    【讨论】:

    • 因为我坚持命名约定,我不需要添加它。这是控制器的默认行为。 'App.PostRoute = Ember.Route.extend({ // 下面的代码是默认行为,所以如果这就是你所需要的, // 根本不需要提供 setupController 实现。 setupController: function(控制器,模型){控制器.set('模型',模型);}});'
    • 你能检查一件事吗。在您的模板文件中尝试记录模型的值 - {{log model}} 看看它是否包含新值或旧值。
    • 是的,您对 setupController 挂钩是正确的,但在您的情况下,您没有更改路由,因此模型挂钩不会被自己调用,您需要编写一些方法来设置控制器的模型。如果你喜欢这个 controller.set('content',model);您的视图将自动刷新
    【解决方案2】:

    最终选择了.. 哪个可行.. 但这是最​​好的方法吗?

    var model = this.get('model');
    model.pushObject(project);
    

    我也发现...

    var posts = this.store.find('post'); //network request.
    var posts = this.store.all('post'); //no network request, but does live reload
    

    Ember.js Models:Finding Reords

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 2020-04-15
      • 2013-10-23
      • 2013-09-06
      相关资源
      最近更新 更多