使用Ember-Model的CRUD操作

时间:2013-09-09 04:50:12

标签: ember.js ember-data handlebars.js ember-model

在这里,我尝试使用ember-model实现CRUD操作。 我对于环境来说是全新的,实际上我对ember-model没有多少了解。

在这里,我正在尝试添加新产品并删除现有产品。我正在使用fixture的内部节点 即cart_items。我的这个灯具包含两个节点,即logged_incart_items,这就是我的灯具结构:

Astcart.Application.adapter = Ember.FixtureAdapter.create();

Astcart.Application.FIXTURES = [
{
    "logged_in": {
        "logged": true,
        "username": "sachin",
        "account_id": "4214"
    },
    "cart_items": [
    {
        "id": "1",
        "name": "Samsung Galaxy Tab 2",
        "qty": "1",
        "price": "100",
        "subtotal": "100"
    },
    {
        "id": "2",
        "name": "Samsung Galaxy Tab 2",
        "qty": "1",
        "price": "100",
        "subtotal": "100"
    },
    {
        "id": "3",
        "name": "Samsung Galaxy Tab 2",
        "qty": "1",
        "price": "100",
        "subtotal": "100"
    }
    ]           
}
];

我想这个夹具结构只是为了从服务器获取一个服务调用中的数据。 现在,这是我用于添加和删除cart_items

中的产品的代码
Astcart.IndexRoute = Ember.Route.extend({
    model: function() {
        return Astcart.Application.find();
    }
}); 

Astcart.IndexController = Ember.ArrayController.extend({
 save: function(){                    
    this.get('model').map(function(application) {                
        var new_cart_item = application.get('cart_items').create({name: this.get('newProductDesc'),qty: this.get('newProductQty'),price: this.get('newProductPrice'),subtotal: this.get('newProductSubtotal')});                
        new_cart_item.save();
            });
 },    
 deleteproduct: function(product){
    if (window.confirm("Are you sure you want to delete this record?")) {                           
    this.get('model').map(function(application) {
        application.get('cart_items').deleteRecord(product);                    
    });            
  }
}
}); 

但是当我试图保存产品时,我得到了例外

Uncaught TypeError: Object [object global] has no method 'get' 

当我试图删除产品时,我收到了异常

Uncaught TypeError: Object [object Object] has no method 'deleteRecord'

在这里,我还想实现一个功能,即在每次保存时我需要检查该产品是否已经存在。 如果产品不存在,那么只保存新产品,否则更新现有产品。 但我不知道该怎么做?

I have posted my complete code here. 任何人都可以帮助我使这个jsfiddle工作吗?

更新

I have updated my code here with debugs.

在这里,我没有得到任何例外,但记录也没有得到删除。 我不知道这里发生了什么?

任何人都可以帮我制作这个jsfiddle吗?

1 个答案:

答案 0 :(得分:0)

'this'上下文在save方法中发生变化。您需要使用控制器的“this”而不是map函数。试试这个:

save: function(){
    var self = this;
    self.get('model').map(function(application) {                
        var new_cart_item = application.get('cart_items').create({
                               name: self.get('newProductDesc'),
                               qty: self.get('newProductQty'),
                               price: self.get('newProductPrice'),
                               subtotal: self.get('newProductSubtotal')
                               });                
        new_cart_item.save();
   });
 }