ember - 隐藏 created.uncommitted 条记录

ember - hide created.uncommitted records

我需要一些关于 ember-数据记录创建的帮助。

我的应用是基于 Code School 教程的基础应用,包含书籍和评论

该应用正在使用 RESTadapter

书页上有一个表格可以写和发送评论

<div class="row">
<div class="col-sm-09">
    <h4>Reviews</h4>
    {{#each review in reviews}}
    <div class="col-sm-3">
        <p>{{review.text}}</p>
        <p class="text-info">{{review.reviewedDate}}</p>
    </div>
    {{else}}
    <p class="text-muted">No Reviews Yet. Be the first to write one!</p>
    {{/each}}
</div>
<div class="col-sm-3">
    <h4>Review</h4>
    {{textarea valueBinding='review.text'}}
    <br>
    <button {{action 'createReview'}} class='btn-primary'>Review</button>
    {{#if review.text}}
    <br><h4>Preview</h4>
    <p class="text-muted">{{review.text}}</p>
    {{/if}}
</div>

我的控制器

App.BookController = Ember.ObjectController.extend({
    logoAvailable: 'images/instock.jpg',
    logoUnavailable: 'images/unavailable.jpg',
    logoAvailability: function () {
        if (this.get('isAvailable'))
            return this.logoAvailable;
        else
            return this.logoUnavailable;
    }.property('isAvailable'),
    review: function () {
        return this.store.createRecord('review', {
            book: this.get('model')
        });
    }.property('model'),
    actions: {
        createReview: function () {
            var controller = this;
            this.get('review').save().then(function (review) {
                controller.set('text', '');
                controller.get('model.reviews').addObject(review);
            }, function (error) {
                console.error(error);
                controller.set('text', '');
                review.unloadRecord();
            });
        }
    }
});

我的模特:

App.Book = DS.Model.extend({
    title: DS.attr('string'),
    isbn: DS.attr('string'),
    summary: DS.attr('string'),
    isAvailable: DS.attr('boolean'),
    featured: DS.attr('boolean'),
    author: DS.belongsTo('author', {async: true}),
    reviews: DS.hasMany('review', {async: true}),

    // computed properties
    image: function () {
        return 'images/books/' + this.get('id') + '.jpg';
    }.property('id'),
    isNotAvailable: function () {
        return !this.get('isAvailable');
    }.property('isAvailable')
});

App.Review = DS.Model.extend({
    text: DS.attr('string'),
    reviewedAt: DS.attr('date'),
    book: DS.belongsTo('book'),

    //Computed Properties
    reviewedDate: function () {
        return moment(this.get('reviewedAt')).format('LLL');
    }.property('reviewedAt')
});

控制器为每本打开的书创建一个新的 "review" 对象,并最终在按下按钮时保存它。

这是有效的,但是

我未提交的记录显示在书评列表中,甚至在提交之前,(好像是实时预览),在 controller.get('model.reviews').addObject(review);

调用之前

我的代码有什么问题,我怎么才能只显示提交的记录(成功的 save() 调用)。

您可以通过 isNew 标志过滤评论。

在您的 BookController 中,您可以这样做:

committedReviews: function () {
    return this.get('model.reviews').filter(function(review) { 
            return !review.get('isNew'); 
        });
}.property('model.reviews')