删除Ember数据中的记录不起作用

时间:2017-04-03 04:26:22

标签: ember.js ember-data

我每行都有一个表(一个组件)和一个删除按钮。单击删除按钮时,应删除特定行。

尝试以下代码:

MyComponent.js

  import Ember from 'ember';

   export default Ember.Component.extend({
   actions:{
    deleteCartRecord(cartDetails){
        debugger;
        this.sendAction('deleteRecord',cartDetails);
    }
 }

});

在MyComponent.hbs中

{{#each model.orderParts as |newCart|}} 
  <div class="card-wrapper col-lg-12 col-md-12">
     <div class="col-lg-2 col-md-2">
        <div class="order-id">{{newCart.partNumber}}</div>
       {{#if (gte newCart.promiseQty newCart.quantity)}}
    <div class="order-status delivered">{{env.APP.StockAvailable}}</div>
    {{else}} {{#if (gt newCart.promiseQty '0'(and (lt newCart.promiseQty newCart.quantity)))}}
    <div class="order-status intransit">{{env.APP.LowInStock}}</div>
    {{else}} {{#if (eq newCart.promiseQty '0')}}
    <div class="order-status outofstock">{{env.APP.OutofStock}}</div>
    {{/if}} {{/if}} {{/if}}
</div>
<div class="col-lg-3 col-md-3">
    <div class="item-header">Delivery Date</div>
    <div class="item-data">{{newCart.deliveryDate}}</div>
</div>
<div class="col-lg-2 col-md-2">
    <div class="item-header">Required Qty.</div>
    <div class="item-data">
        {{increse-required-quantity incresedQuantity=newCart.quantity}}
    </div>
</div>
<div class="col-lg-2 col-md-2">
    <div class="item-header">Unit Price</div>
    <div class="item-data">{{newCart.unitPrice}}</div>
</div>
<div class="col-lg-2 col-md-2">
    <div class="item-header">Total Price</div>
    <div class="item-data">{{newCart.partTotalPrice}}</div>
</div>
<div class="col-lg-1 col-md-1 button-colum"><button type="button" class="btn btn-danger" {{action "deleteCartRecord" newCart}}>Delete</button>             </div>
  </div>
 {{/each}} 

我的控制器

   import Ember from 'ember';
   export default Ember.Controller.extend({
     actions:{
        deleteRecord(data){
          debugger; 
            let confirmation = confirm("are you sure to delete");
            if(confirmation)
            {
               debugger;
               data.deleteRecord();
               data.save();

            }
       }
  }
});

调用组件的模板文件          

    <hr>
</div>

<div class="col-lg-12 col-md-12">
    <div class="checkout-summery-wrapper">
        <div class="total-label">Total</div>
        <div class="total">{{model.totalPrice}}</div>
        <!--<div class="tax-text">( Inclusive of all taxes )</div>-->
        <div class="place-order-button"><button type="button" class="btn siemens-btn">Place Order</button></div>
    </div>
</div>

<div class="col-lg-12 col-md-12">
    {{#if model.orderParts.isGeneric}}
    <div class="panel panel-default card-list-panel">
        <div class="panel-heading-cart col-lg-12 col-md-12">
            <div class="col-lg-11 col-md-11 heading">Generic Parts</div>
            <div class="col-lg-1 col-md-1"><a href='#' class="delete-all">Delete All</a></div>
        </div>
        <div class="panel-body">
            {{cart-record model = model}}
        </div>
    </div>
    {{/if}}
    {{#unless model.orderParts.isGeneric}}
    <div class="panel panel-default card-list-panel">
        <div class="panel-heading-cart col-lg-12 col-md-12">
            <div class="col-lg-11 col-md-11 heading">Hot Gas Path</div>
            <div class="col-lg-1 col-md-1"><a href='#' class="delete-all">Delete All</a></div>
        </div>
        <div class="panel-body">
            {{cart-record model = model deleteRecord=(action 'deleteRecord')}}
        </div>
    </div>
    {{/unless}}
</div>

MyRoute

 import Ember from 'ember';

  export default Ember.Route.extend({
     model: function()
     {
             return this.get('store').queryRecord('cart',{userId:1})
     }

  });

My Serializer

  import DS from 'ember-data';

  export default DS.JSONSerializer.extend(DS.EmbeddedRecordsMixin, {
       primaryKey: 'totalPrice',

       attrs: {
        orderParts:
       {
           serialize: 'records',
           deserialize: 'records'
       }

    }

 });

我有以下问题:

  1. 在MyComponent.hbs中,newCart会作为参数传递,删除我要删除的所有记录或特定记录吗?
  2. 关于为什么不从组件中调用MyController的任何想法?
  3. 这是在ember中删除记录的正确方法吗?
  4. 提前谢谢。

2 个答案:

答案 0 :(得分:1)

  

在MyComponent.hbs中,newCart作为参数传递,这将删除我想要的所有记录或特定记录吗?

它将仅删除特定记录。如果您要删除所有记录,则可以尝试unloadAll('model-name')

  

未从组件中调用MyController,为什么会这样?

您需要发送操作upcon调用组件{{my-component deleteRecord=(action 'deleteRecords') }}。实际上真正的问题是,你正在调用deleteRecord,但在控制器中你得到了deleteRecords

  

这是在ember中删除记录的正确方法吗?

如果您想立即删除,则可以使用destroyRecord这将立即删除并保存记录

答案 1 :(得分:0)

嗯,你的例子充满了错误......

  
      
  1. 在MyComponent.hbs中,将newCart作为参数传递,删除我要删除的所有记录或特定记录吗?
  2.   

不。
首先,您需要了解路线中store.query的结果会返回 DS.ManyArray (类似于数组的对象,在您的示例中为 model )包含一组 DS.Model 实例(示例中应为 newCart ,但您必须先更改为{{#each model as |newCart|}})。只有 DS.Model 的方法 .save() .deleteRecord()
您在按钮上设置的操作是{{action "deleteCartRecord" newCart.partNumber}},因此您实际上将名为partNumber的属性传递给deleteRecord并运行deleteRecord并保存此属性。除非 partNumber 是指向另一个 DS.Model DS.belongsTo ,否则它根本无效。
但你想要的是删除newCart,对吧?

  
      
  1. 关于为什么不从组件中调用MyController的任何想法?
  2.   

你的调用是对的。但是,由于你的组件充满了bug,它必须在其他地方抛出异常而app已经无法运行。

  
      
  1. 这是在ember中删除记录的正确方法吗?
  2.   

我想我在第一个问题上回答得足够多了。