在使用createRecord()添加记录后,如何刷新ember.js中的模型?

时间:2013-02-18 20:12:01

标签: ember.js ember-data

更新:这已经过时了,我的博客不再是基于Ember的了。基本上,我的问题很简单。我添加了createRecord()的记录。我可以看到didCreate事件被触发,但我不知道如何使ember加载并显示我刚创建的内容。这个案例是关于在帖子中添加评论 - 这就是我想要立即看到的内容。

更新:我没有jsfiddle,但我可以炫耀我正在谈论的实时应用/网站是我自己的博客,在这里:http://eduardmoldovan.com/

模板位于页面底部,javascript位于:http://eduardmoldovan.com/static/eduardmoldovan.com/javascripts/ngin.js

3 个答案:

答案 0 :(得分:1)

假设您已使用commit()来保存注释,这样的事情应该有效:

{{#each comment in post.comments}}
  {{comment.text}}
{{/each}}

答案 1 :(得分:1)

<击> 您可以手动将新记录添加到didCreate挂钩的记录数组中:

var newRecord = transaction.createRecord(Ngin.Comment, {
    articleUrl: articleUrl,
    name: name,
    url: url,
    email: email,
    body: body,
    secret: secret
});
newRecord.one('didCreate', this, function () {
    this.get('comments').pushObject(newRecord);
});
transaction.commit();

或者,如果要从服务器重新加载,请使用reload方法:

controller.get("comments").reload();

<击>

修改

检查源代码后,我在课程update中找到了RecordArray方法。这似乎是正确的。

答案 2 :(得分:0)

以下既不是有效的也不是最好的方法,但它会通知视图。并将尝试找到更好的方法。我确定有一个更新方法和一个通知视图的方法。无法立即找到它。

模板

<script type="text/x-handlebars" id="posts">
<button {{action 'newObject'}} ></button>

控制器

App.PostsController = Ember.ArrayController.extend

  actions: {
    newObject: function() {
       this.store.createRecord('post', {id: xxxx, title: 'Default title'});
       var all = this.store.filter('post', function(post) {
         return post; // return each object
       }); //This filter will include the new post record
       this.set('model', all); // set will notify the view of a mutated array
    }
  },